Python Excel按文件名信息自动填表
从文件名中解析出日期、部门、类型等信息,自动写入Excel对应列,批量给一批文件生成台账,告别手工录入。
场景痛点
文件夹里堆了几百个PDF/Excel,文件名里就带着信息:"2026-09-10_销售部_张三_合同.pdf"。要把这些信息录到一张台账Excel里,手工复制粘贴几百次。用Python正则从文件名里抠出信息,自动填表。
用到的库
pip install pandas openpyxl
完整代码
import os
import re
import pandas as pd
def parse_filename(filename):
"""
从文件名解析信息
约定格式: 日期_部门_姓名_类型.后缀
例: 2026-09-10_销售部_张三_合同.pdf
"""
# 去掉后缀
name = os.path.splitext(filename)[0]
# 用正则解析
m = re.match(r"^(\d{4}-\d{2}-\d{2})_(.+?)_(.+?)_(.+)$", name)
if not m:
return None
return {
"日期": m.group(1),
"部门": m.group(2),
"姓名": m.group(3),
"类型": m.group(4),
"原始文件名": filename
}
def build_ledger(input_dir, output_file):
rows = []
for f in os.listdir(input_dir):
# 只处理需要归档的文件类型
if not (f.endswith(".pdf") or f.endswith(".xlsx") or f.endswith(".docx")):
continue
info = parse_filename(f)
if info:
rows.append(info)
else:
print(f" 文件名不符合规则,跳过: {f}")
if not rows:
print("没有解析到任何文件")
return
df = pd.DataFrame(rows)
df.to_excel(output_file, index=False)
print(f"共解析{len(rows)}个文件 -> {output_file}")
print(df.head())
if __name__ == "__main__":
build_ledger("./归档文件", "./文件台账.xlsx")
代码讲解
parse_filename用正则(\d{4}-\d{2}-\d{2})_(.+?)_(.+?)_(.+)把文件名按"下划线"切成4段,分别对应日期、部门、姓名、类型。- 正则规则按实际文件名格式改,比如文件名是
张三-销售部-20260910-合同.pdf,正则就改成^(.+?)-(.+?)-(\d{8})-(.+)$。 - 解析失败的文件名打印出来人工处理,不会中断整个流程。
- 所有解析结果组装成DataFrame一次导出,比逐行写快。
运行结果
扫描目录下所有文件,解析成功的写入 文件台账.xlsx,失败的打印出来人工核对。
注意事项
- 正则规则必须和实际文件名严格一致,多一个空格、少一个下划线都会匹配失败,先打印几个样本文件名确认格式。
- 如果文件名本身包含下划线,按
_切分会错位,建议改用更明确的分隔符或位置规则。 - 这是个通用框架,换不同正则就能解析不同命名规范,比如"工号_姓名_入职表.pdf"。

更新时间:2026-09-15 09:15:23
上一篇:Python Excel生成自动序号列:每行递增1从1开始