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

用Python+PyPDF2+pdfplumber拆分学生PDF并按信息命名单页

解决多页学生PDF拆分并按姓名ID命名的问题

你的代码目前仅能生成最后一页的PDF文件,且所有文件都用第一页的学生信息命名,核心问题是文件名提取逻辑未与每页拆分逻辑绑定,同时存在模块缺失和缩进错误。以下是修正后的完整代码及关键说明:

修正后的代码

from PyPDF2 import PdfReader, PdfWriter
import pdfplumber

def pdf_splitter(path):
    # 读取整个PDF文件
    pdf_reader = PdfReader(path)
    
    # 遍历每一页进行处理
    for page_num in range(len(pdf_reader.pages)):
        # 初始化PDF写入器,添加当前页
        pdf_writer = PdfWriter()
        pdf_writer.add_page(pdf_reader.pages[page_num])
        
        # 提取当前页的学生信息生成文件名
        with pdfplumber.open(path) as pdf:
            current_page = pdf.pages[page_num]
            txt = current_page.extract_text().split()
            
            try:
                # 根据文本中的关键词定位姓名和ID
                student_tag_idx = txt.index('Student:')
                last_name = txt[student_tag_idx + 1].rstrip(',')  # 移除姓氏后的逗号
                first_name = txt[student_tag_idx + 2]
                id_tag_idx = txt.index('ID:')
                student_id = txt[id_tag_idx + 1]
                
                output_filename = f'{last_name} - {first_name} - {student_id}.pdf'
            except ValueError:
                # 若某页格式异常,用页码作为备用命名
                output_filename = f'未识别信息_第{page_num + 1}页.pdf'
                print(f"第{page_num + 1}页未找到学生信息,使用默认命名")
        
        # 将当前页写入新文件
        with open(output_filename, 'wb') as out_file:
            pdf_writer.write(out_file)
        
        print(f'已生成文件: {output_filename}')

if __name__ == '__main__':
    path = 'file.pdf'
    pdf_splitter(path)

关键改动说明

  1. 补充必要导入:添加from PyPDF2 import PdfReader, PdfWriter,原代码缺少该模块会直接报错。
  2. 循环内绑定处理逻辑:将文件名提取、页面写入逻辑全部放入循环内部,确保每一页都单独生成对应文件名的PDF。
  3. 针对当前页提取信息:不再固定读取第一页,而是根据循环的page_num获取当前页的文本内容,匹配对应学生的姓名和ID。
  4. 异常容错处理:增加try-except块,避免因某一页格式异常导致程序中断,自动生成备用文件名。
  5. 变量名优化:将id改为student_id,避免与Python内置函数id()冲突。
  6. 修正缩进错误:调整代码块缩进,确保循环内的逻辑能被正确执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:40