You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:48:02