我的知识记录

Python批量记录文件清单到Excel台账教程

用Python递归扫描文件夹,把文件名、大小、创建时间、修改时间、所在路径等信息批量写入Excel台账,自动统计文件类型分布和总大小。

场景痛点

领导要一份"项目文件夹里到底有哪些文件、多少G、都是什么类型"的清单,你打开资源管理器手动复制粘贴,文件名长到截断、大小格式不统一、时间还得自己看。几百个文件整理一下午。用Python扫一遍,几秒钟生成一份完整Excel台账,文件名、路径、大小、创建时间、修改时间、后缀全列好,还自动汇总各类文件数量和总大小。

用到的库

pip install openpyxl

核心用标准库 ospathlibdatetime,Excel导出用 openpyxl

完整代码

import os
from pathlib import Path
from datetime import datetime
from collections import Counter
from openpyxl import Workbook


def human_size(n: int) -> str:
for unit in ("B", "KB", "MB", "GB"):
if n < 1024:
return f"{n:.1f}{unit}"
n /= 1024
return f"{n:.1f}TB"


def scan_files(root_dir: str):
"""递归扫描目录,收集所有文件信息。"""
root = Path(root_dir)
rows = []
ext_counter = Counter()
total_size = 0

for dirpath, _, filenames in os.walk(root):
for name in filenames:
p = Path(dirpath) / name
try:
stat = p.stat()
except OSError:
continue

ext = p.suffix.lower() or "(无后缀)"
ext_counter[ext] += 1
total_size += stat.st_size

rows.append({
"文件名": name,
"所在目录": str(p.parent),
"完整路径": str(p),
"后缀": ext,
"大小字节": stat.st_size,
"大小可读": human_size(stat.st_size),
"创建时间": datetime.fromtimestamp(
stat.st_ctime).strftime("%Y-%m-%d %H:%M:%S"),
"修改时间": datetime.fromtimestamp(
stat.st_mtime).strftime("%Y-%m-%d %H:%M:%S"),
})

return rows, ext_counter, total_size


def export_excel(rows: list, ext_counter: Counter,
total_size: int, out_path: str):
wb = Workbook()

# Sheet1:文件明细
ws = wb.active
ws.title = "文件明细"
headers = ["序号", "文件名", "所在目录", "后缀",
"大小可读", "创建时间", "修改时间", "完整路径"]
ws.append(headers)
for idx, r in enumerate(rows, 1):
ws.append([idx, r["文件名"], r["所在目录"], r["后缀"],
r["大小可读"], r["创建时间"], r["修改时间"],
r["完整路径"]])
widths = [6, 30, 40, 10, 12, 20, 20, 70]
for i, w in enumerate(widths, 1):
ws.column_dimensions[chr(64 + i)].width = w

# Sheet2:类型汇总
ws2 = wb.create_sheet("类型汇总")
ws2.append(["文件类型", "数量", "占比"])
total = sum(ext_counter.values())
for ext, cnt in ext_counter.most_common():
ws2.append([ext, cnt, f"{cnt/total*100:.1f}%"])
ws2.append(["合计", total, "100%"])
ws2.append([])
ws2.append(["总大小", human_size(total_size)])
ws2.column_dimensions['A'].width = 15
ws2.column_dimensions['B'].width = 10
ws2.column_dimensions['C'].width = 10

wb.save(out_path)


if __name__ == "__main__":
ROOT = r"D:\工作资料\XX项目"
rows, ext_counter, total_size = scan_files(ROOT)
print(f"共扫描 {len(rows)} 个文件,总大小 {human_size(total_size)}")

OUT = r"D:\工作资料\项目文件台账.xlsx"
export_excel(rows, ext_counter, total_size, OUT)
print(f"台账已生成:{OUT}")

代码讲解

scan_filesos.walk 递归遍历,每个文件收集8个字段:文件名、目录、完整路径、后缀、字节大小、可读大小、创建时间、修改时间。Counter 顺手统计每种后缀出现次数,最后做汇总页。Excel分两个Sheet:明细页逐行列出所有文件,汇总页统计各类型数量和占比,再附总大小。human_size 函数在大小筛选那篇也用过,把字节自动转成合适单位。列宽手动设,保证长路径不被截断。

运行结果

控制台打印文件总数和总大小。生成的 项目文件台账.xlsx 有两个Sheet:"文件明细"逐文件列出所有属性,"类型汇总"按后缀统计数量占比。打开就能按后缀筛选、按大小排序,做盘点报告直接截图汇总页。

注意事项

  • st_ctime 在Linux上是元数据变更时间,不是创建时间,Windows下才是创建时间。
  • 目录里如果有几万个文件,Excel行数会撑爆(xlsx上限104万行,一般够用),超大目录考虑分批导出。
  • 系统隐藏文件(如 Thumbs.db.DS_Store)也会被扫进来,想过滤就在遍历时加判断。
  • 路径太长(Windows上限260字符)可能报错,脚本用try-except跳过,不影响其他文件。

Python批量记录文件清单到Excel台账教程

标签:

更新时间:2026-09-14 21:21:28

上一篇:Python 批量提取文件夹内所有文件名清单:导出 Excel/TXT

下一篇:Python批量删除文件到回收站教程