Python遍历文件夹树字典生成CSV仅输出单个文件夹键值对问题求助
问题根因
folder_dict被放在os.walk循环内部初始化,每次遍历到新文件夹时都会清空之前的所有键值对,循环结束后字典仅保留最后一个遍历到的文件夹的文件信息,这是CSV只存单文件夹内容的核心原因- CSV写入时的格式化字符串写错,第一个占位符写成了
%而非%s,会触发字符串格式化报错 - 手动拼接CSV内容没有做转义处理,遇到文件名带逗号、换行符的场景会导致整个CSV格式错乱
os.walk的topdown参数要求传入布尔值,你传了字符串'true'属于不规范写法,虽然Python隐式转换后不会报错,但不符合参数要求
修正后可运行代码
import os import csv root_dir = '.' # 循环外初始化空字典,避免每次覆盖 folder_dict = {} for root, dirs, files in os.walk(root_dir, topdown=True): # 用update方法把当前文件夹的文件信息追加到全局字典 folder_dict.update({filename: root for filename in files}) print(folder_dict) # 用csv模块处理写入更规范 with open('test.csv', 'w', encoding='utf-8', newline='') as csvfile: writer = csv.writer(csvfile) # 可选:写入表头 writer.writerow(['文件名', '存储路径']) for filename, path in folder_dict.items(): writer.writerow([filename, path])
额外注意事项
如果文件夹树中存在重名文件,字典的键会被后遍历到的文件覆盖,导致丢失部分记录。如果需要保留所有文件信息,可以改成存列表而非字典:
file_list = [] for root, dirs, files in os.walk(root_dir, topdown=True): for filename in files: file_list.append([filename, root])
内容的提问来源于stack exchange,提问作者rapidorange
相关产品推荐
相关产品推荐

