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

如何使用Python读取PDF首行内容批量重命名PDF文件

PDF批量按首行重命名Python实现方案

这个需求完全可以通过Python实现,整体逻辑清晰,不需要复杂的工具支持,仅需少量代码即可完成批量处理。

依赖安装

需要用到第三方PDF解析库PyPDF2,搭配Python自带的os、re模块即可完成文件遍历、重命名、字符清洗操作,执行以下命令安装依赖:
pip install PyPDF2

可直接运行的完整代码

import os
import re
from PyPDF2 import PdfReader

# 替换为你本地存放PDF文件的文件夹路径
PDF_DIR = r"替换为你的PDF文件夹实际路径"
# 匹配Windows/macOS系统文件名不允许的非法字符
INVALID_NAME_CHAR = re.compile(r'[\\/*?:"<>|\r\n\t]')

if __name__ == "__main__":
    for file_name in os.listdir(PDF_DIR):
        # 跳过非PDF文件
        if not file_name.lower().endswith(".pdf"):
            continue
        old_path = os.path.join(PDF_DIR, file_name)
        # 跳过子文件夹,仅处理文件
        if not os.path.isfile(old_path):
            continue
        try:
            # 读取PDF第一页内容
            pdf_reader = PdfReader(old_path)
            first_page_content = pdf_reader.pages[0].extract_text()
            if not first_page_content:
                print(f"跳过文件 {file_name}:无法提取有效文本(可能是扫描件)")
                continue
            # 拆分文本行,取第一个非空行作为首行
            line_list = [line.strip() for line in first_page_content.splitlines() if line.strip()]
            if not line_list:
                print(f"跳过文件 {file_name}:第一页无有效文本行")
                continue
            first_line = line_list[0]
            # 清洗非法字符,避免重命名报错
            clean_name = INVALID_NAME_CHAR.sub("", first_line).strip()
            if not clean_name:
                print(f"跳过文件 {file_name}:首行清洗后无有效文件名")
                continue
            # 处理重名冲突,重名文件自动追加数字后缀
            new_name = f"{clean_name}.pdf"
            new_path = os.path.join(PDF_DIR, new_name)
            num_suffix = 1
            while os.path.exists(new_path):
                new_name = f"{clean_name}_{num_suffix}.pdf"
                new_path = os.path.join(PDF_DIR, new_name)
                num_suffix += 1
            # 执行重命名
            os.rename(old_path, new_path)
            print(f"处理完成:{file_name} -> {new_name}")
        except Exception as e:
            print(f"处理文件 {file_name} 失败:{str(e)},已自动跳过")

使用说明

  • 运行代码前务必备份所有原PDF文件,避免操作失误导致文件异常
  • 将代码中PDF_DIR变量的值替换为你本地存放PDF的实际文件夹路径即可运行
  • 代码自动适配Windows、macOS系统的文件名规则,自动过滤非法字符、处理重名文件、跳过无法解析的文件,不会中途崩溃
  • 如果是扫描版图片PDF,没有可直接提取的文本层,该代码无法识别内容,需要额外接入OCR工具才能实现文本提取
  • 如果需要严格取PDF第一页最顶部的行(包括空行),可以删除代码中判断空行的逻辑,直接取拆分后的第一行即可

内容的提问来源于stack exchange,提问作者Angelo Malfitano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:24:32