| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python - walk()方法详解2 -> 正文阅读 |
|
[Python知识库]Python - walk()方法详解2 |
展示目录和文件直接的结构关系,方式有很多,下面这中式最直接明了的,代码是网上学习,所以如下这段代码并非原创,只是不知道来自哪里。 展示的文件结构如下: 这种展示也是大家所期待的,因为层级关系更清晰。 实现代码如下: import os import argparse import time class FileTreeMaker(object): def _recurse(self, parent_path, file_list, prefix, output_buf, level): if len(file_list) ==0 or (self.max_level != -1 and self.max_level <= level): return else: file_list.sort(key=lambda f: os.path.isfile(os.path.join(parent_path, f))) for idx, sub_pathin enumerate(file_list): if any(exclude_namein sub_pathfor exclude_namein self.exn): continue full_path = os.path.join(parent_path, sub_path) idc =“┣━” if idx ==len(file_list) -1: idc =“┗━” if os.path.isdir(full_path)and sub_pathnot in self.exf: output_buf.append("%s%s[%s]" % (prefix, idc, sub_path)) if len(file_list) >1 and idx !=len(file_list) -1: tmp_prefix = prefix +"┃? " else: tmp_prefix = prefix +"? ? " self._recurse(full_path, os.listdir(full_path), tmp_prefix, output_buf, level +1) elif os.path.isfile(full_path): output_buf.append("%s%s%s" % (prefix, idc, sub_path)) def make(self, args): self.root = args.root self.exf = args.exclude_folder self.exn = args.exclude_name self.max_level = args.max_level print(“root:%s” %self.root) buf = [] path_parts =self.root.rsplit(os.path.sep, 1) buf.append("[%s]" % (path_parts[-1],)) self._recurse(self.root, os.listdir(self.root), “”, buf, 0) output_str ="\n".join(buf) if len(args.output) !=0: with open(args.output, ‘w’)as of: of.write(output_str) return output_str def Show_Folder_File_Struct(theFolderPath): parser = argparse.ArgumentParser() # parser.add_argument("-r", “–root”, help=“root of file tree”, default=".") parser.add_argument("-r", “–root”, help=“root of file tree”, default=theFolderPath) parser.add_argument("-o", “–output”, help=“output file name”, default="") parser.add_argument("-xf", “–exclude_folder”, nargs=’*’, help=“exclude folder”, default=[]) parser.add_argument("-xn", “–exclude_name”, nargs=’*’, help=“exclude name”, default=[]) parser.add_argument("-m", “–max_level”, help=“max level”, type=int, default=-1) args = parser.parse_args() print(FileTreeMaker().make(args)) 测试验证: Show_Folder_File_Struct(r’D:\test’) 除了展示,有时需要将文件的结构存储到Log日志,如下代码演示存储Log。 def Storage_Fodler_Struct(theFolder): with open(‘logs.txt’, ‘w’, encoding=“utf8”)as f: for root, dirs, filesin os.walk(theFolder): f.write(“目录:” + root +’\n’) if dirs !="": for din dirs: f.write(“子目录:” + d +’\n’) if files !="": for filein files: f.write(“文件:” + file +’\n’) f.write(’*’ *50 +"\n") 执行上述函数验证: Storage_Fodler_Struct(r’D:\Test’) 在当前目录存储了一个log.txt文件,文件内容是结构信息: 目录:D:\Test 子目录:Test1 子目录:Test2 文件:新建文本文档- 副本(2).txt 文件:新建文本文档- 副本(3).txt 文件:新建文本文档- 副本.txt 文件:新建文本文档.txt ************************************************** 目录:D:\Test\Test1 文件:S1新建文本文档- 副本(2).txt 文件:S1新建文本文档- 副本.txt 文件:S1新建文本文档.txt ************************************************** 目录:D:\Test\Test2 子目录:Test2_1 文件:S2新建文本文档- 副本(2).txt 文件:S2新建文本文档- 副本.txt 文件:S2新建文本文档.txt ************************************************** 目录:D:\Test\Test2\Test2_1 文件:子目录2下的子目录的文件- 副本.txt 文件:子目录2下的子目录的文件.txt ************************************************** 下一篇利用1,2的知识,做文件名的遍历修改,扩展名的遍历修改,文件夹的备份等操作。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:20:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |