乐于分享
好东西不私藏

有一堆pdf文件,自动按照excel表中文件名进行模糊搜索筛选,并按照excel顺序排序重命名?

有一堆pdf文件,自动按照excel表中文件名进行模糊搜索筛选,并按照excel顺序排序重命名?

有一堆pdf发票文件,如何按照excel表中文件名进行模糊搜索筛选,并按照excel顺序排序重命名

你这个需求,本质上是:

用 Excel 里的“目标名称”→ 去一堆 PDF 发票中做“模糊匹配”→ 找到对应 PDF→ 按 Excel 顺序重新命名。

这个非常适合用 Python 自动化。


一、举个实际例子(你要实现的效果)

1. 你的 PDF 文件夹里:

广东XX科技有限公司_发票_38921.pdf深圳XX贸易有限公司_电子发票.pdf广州XX有限公司2025.pdf

2. Excel 里:

排序
公司名
1
广东XX科技
2
广州XX
3
深圳XX贸易

3. 最终自动变成:

001_广东XX科技.pdf002_广州XX.pdf003_深圳XX贸易.pdf

并且:

  • 自动模糊匹配

  • 自动排序

  • 自动重命名

  • 不需要一个个手动找


二、最推荐方案(简单稳定)

用:

  • Python

  • pandas(读Excel)

  • pathlib(操作文件)

  • rapidfuzz(模糊匹配,速度非常快)


三、先安装库

打开 CMD输入:

pip install pandas openpyxl rapidfuzz

四、Excel格式(非常重要)

假设:

文件名:

名单.xlsx

内容:

公司名
广东XX科技
广州XX
深圳XX贸易

注意:

  • 第一行必须是标题

  • 列名必须叫:

公司名

五、完整代码(推荐版)

下面这个是:

✅ 模糊匹配✅ 自动排序✅ 自动重命名✅ 防止重名✅ 自动输出结果✅ 适合初学者

from pathlib import Pathimport pandas as pdfrom rapidfuzz import fuzz# ========= 配置区域 =========# PDF文件夹pdf_folder = Path(r"发票PDF")# Excel路径excel_path = r"公司名.xlsx"# 匹配相似度(越低越宽松)MATCH_SCORE = 60# ===========================# 读取Exceldf = pd.read_excel(excel_path)# 获取公司名列表company_list = df["公司名"].tolist()# 获取所有PDFpdf_files = list(pdf_folder.glob("*.pdf"))# 记录已经匹配过的文件used_files = set()# 开始匹配for index, company in enumerate(company_list, start=1):    best_score = 0    best_file = None    # 遍历所有PDF    for pdf_file in pdf_files:        # 已经被使用过        if pdf_file in used_files:            continue        # 文件名        filename = pdf_file.stem        # 模糊匹配        score = fuzz.partial_ratio(company, filename)        # 找最高分        if score > best_score:            best_score = score            best_file = pdf_file    # 达到阈值才重命名    if best_score >= MATCH_SCORE and best_file:        # 新文件名        new_name = f"{index:03d}_{company}.pdf"        # 新路径        new_path = pdf_folder / new_name        # 重命名        best_file.rename(new_path)        # 标记已使用        used_files.add(new_path)        print(f"√ 已匹配: {best_file.name} → {new_name}")    else:        print(f"× 未找到匹配: {company}")print("处理完成")

六、代码核心原理(你以后会经常用)


1. 读取Excel

pd.read_excel()

把 Excel 变成表格数据。


2. 遍历PDF

glob("*.pdf")

获取文件夹所有 PDF。


3. 模糊匹配

fuzz.partial_ratio()

例如:

广东XX科技广东XX科技有限公司电子发票

也能匹配。

这是核心。


4. 自动排序编号

f"{index:03d}"

效果:

001002003

避免:

1102

这种乱序。


七、这个方案的优点

优点

1. 不要求文件名完全一致

这是最关键的。

发票文件名通常:

XX有限公司电子普通发票(3)最终版.pdf

很乱。

模糊匹配非常适合。


2. 自动排序

Excel顺序就是最终顺序。


3. 速度快

几千个PDF也能跑。


4. 稳定

比 VBA 更适合这种文件处理。


八、进一步升级(你后面可以继续做)

你以后还能继续升级:


1. 自动识别发票内容(OCR)

不是匹配文件名。

而是:

  • 读取PDF内容

  • 识别公司名

  • 自动匹配

适合:

扫描版发票

你之前学的 OCR 就能接上。


2. 自动移动分类

例如:

增值税专票/普通发票/作废发票/

自动分类。


3. 自动生成Excel结果

例如:

Excel公司名
匹配到文件
匹配度
广东XX科技
广东XX科技有限公司.pdf
93

方便人工复核。


九、实际工作里建议你这样做

推荐目录结构:

项目文件夹/├── 发票PDF/├── 名单.xlsx└── rename.py

这样最清晰。


——————————————————————————
需要注意的是:
EXCEL重命名为:"公司名.xlsx"
EXCEL表的第一行要写标题名:"公司名"
文件夹重命名为:"发票PDF"
然后运行代码即可将文件夹按顺序重命名了!