我们使用了不同的符号来表示目录和文件,并在文件之间添加了线条。对于每个目录,我们打印出一个├──
符号,后面跟着目录名。对于文件,我们在除了最后一个文件之外的每个文件前面都添加了一个│
符号,表示它们在同一层级上。对于最后一个文件,我们使用└──
符号,表示它是当前层级的最后一个项目。
代码如下
import os # 导入os模块,用于文件和目录操作
def list_files_with_full_path(startpath, output_filename):
"""
遍历指定文件夹路径,并打印出所有子文件夹和文件的结构。
同时将结构输出到控制台和一个文本文件中。
参数:
startpath -- 要遍历的起始文件夹路径
output_filename -- 输出文件的名称
"""
with open(output_filename, 'w', encoding='utf-8') as f: # 打开输出文件以写入模式
print(f'│ [Start Directory: {start_directory}]', file=f) # 将起始目录信息写入文件
print(f'│ [Start Directory: {start_directory}]') # 打印起始目录信息到控制台
for root, dirs, files in os.walk(startpath): # 遍历文件夹及其子文件夹
level = root.replace(startpath, '').count(os.sep) # 计算当前目录的深度
indent = ' ' * 4 * (level) # 根据深度生成缩进字符串
dir_line = f'{indent}├── [Directory: {os.path.basename(root)}]' # 构建表示目录的字符串
print(dir_line, file=f) # 将目录信息写入文件
print(dir_line) # 打印目录信息到控制台
subindent = ' ' * 4 * (level + 1) # 生成文件的缩进字符串
for index, filename in enumerate(files): # 遍历当前目录下的所有文件
if index < len(files) - 1: # 如果不是最后一个文件
file_line = f'{subindent}│ {filename}' # 构建文件的字符串
else: # 如果是最后一个文件
file_line = f'{subindent}└── {filename}' # 构建文件的字符串
print(file_line, file=f) # 将文件信息写入文件
print(file_line) # 打印文件信息到控制台
# 使用函数
start_directory = r'E:\\Model' # 设置要遍历的起始文件夹路径
output_file = 'file_structure.txt' # 设置输出文件的名称
list_files_with_full_path(start_directory, output_file) # 调用函数
输出效果,能呈现整树枝状结构,并输出txt file
这段代码的输出将同时在控制台上显示,并且保存在指定的文本文件中,从而提供了一个可视化的文件夹结构。