Python 批量提取文件夹内所有文件名清单:导出 Excel/TXT
用 Python 递归提取文件夹里所有文件名,导出成 txt 或 csv 清单,含相对路径、大小、修改时间,方便做目录索引、物料盘点、文件交接。
场景痛点
交接项目、盘点素材库、做物料清单,需要把一个文件夹里所有文件名整理成一张表交给同事。手动复制粘贴太慢,子文件夹套好几层根本理不清。用 Python 递归把所有文件的相对路径、大小、修改时间抓出来,直接导出成 csv 或 txt,用 Excel 打开就能筛选排序。
用到的库
纯标准库,无需 pip 安装(csv 为标准库):
# os、csv、datetime 为标准库
完整代码
import os
import csv
from datetime import datetime
# ========== 配置区 ==========
ROOT_DIR = "./项目素材" # 要提取清单的根目录
OUTPUT_FILE = "./文件清单.csv" # 输出文件
EXPORT_RELATIVE_PATH = True # True=存相对路径,False=存绝对路径
# ============================
def human_size(n: float) -> str:
for unit in ["B", "KB", "MB", "GB", "TB"]:
if n < 1024:
return f"{n:.1f} {unit}"
n /= 1024
return f"{n:.1f} PB"
def main():
if not os.path.isdir(ROOT_DIR):
print(f"目录不存在:{ROOT_DIR}")
return
rows = []
for dirpath, dirnames, filenames in os.walk(ROOT_DIR):
# 同时记录子文件夹,让清单能反映目录结构
for d in dirnames:
full = os.path.join(dirpath, d)
rel = os.path.relpath(full, ROOT_DIR)
rows.append({
"类型": "文件夹",
"路径": rel if EXPORT_RELATIVE_PATH else full,
"大小": "-",
"修改时间": datetime.fromtimestamp(os.path.getmtime(full)).strftime("%Y-%m-%d %H:%M"),
})
for name in filenames:
full = os.path.join(dirpath, name)
rel = os.path.relpath(full, ROOT_DIR)
try:
size = os.path.getsize(full)
mtime = os.path.getmtime(full)
except (PermissionError, OSError):
continue
rows.append({
"类型": "文件",
"路径": rel if EXPORT_RELATIVE_PATH else full,
"大小": human_size(size),
"修改时间": datetime.fromtimestamp(mtime).strftime("%Y-%m-%d %H:%M"),
})
# 按路径排序,输出整齐
rows.sort(key=lambda r: r["路径"])
# 写 csv,指定 utf-8-sig 让 Excel 直接打开不乱码
with open(OUTPUT_FILE, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=["类型", "路径", "大小", "修改时间"])
writer.writeheader()
writer.writerows(rows)
print(f"共导出 {len(rows)} 条记录 -> {OUTPUT_FILE}")
if __name__ == "__main__":
main()
代码讲解
- os.walk 同时收文件夹和文件:dirnames 记录子目录、filenames 记录文件,导出来的清单能完整反映目录结构,不只是平铺文件名。
- 相对路径 os.path.relpath:导出相对于 ROOT_DIR 的路径,比如
合同/2024/定稿.pdf。这样清单拷给别人也能看懂目录层级,不会带上你机器上的绝对路径。 - 大小和修改时间:每个文件带上可读的大小和修改时间,Excel 里可以按时间排序、按大小筛选,盘点更方便。
- utf-8-sig 编码:写 csv 时用
utf-8-sig(带 BOM),Excel 双击打开中文不乱码。用普通 utf-8 在 Excel 里打开会乱码,这是坑。 - 排序:导出前按路径排一下,输出整齐,像一棵目录树。
运行结果
脚本跑完在 OUTPUT_FILE 位置生成一个 csv 文件,用 Excel 打开,每行是一条「类型/路径/大小/修改时间」记录。直接发给同事,或自己在 Excel 里做筛选、统计、核对。
注意事项
- utf-8-sig 不是 utf-8:给 Excel 用就用 utf-8-sig;给程序读就用 utf-8。别用错。
- 相对 vs 绝对路径:交接用相对路径更通用;要做本机自动化处理用绝对路径。
- 软链接/快捷方式:会被当成普通文件列出来,不需要就在遍历时过滤。
- 隐藏文件:
.DS_Store、.git也会进清单。想过滤就在遍历时跳过以.开头的名字。 - 大目录导出慢:几十万文件的目录导出 csv 会比较大,正常现象,打开 Excel 时也会卡,必要时按子目录分批导。

更新时间:2026-09-14 21:20:55