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

如何基于Pandas DataFrame批量提取PDF指定页并生成对应文件夹与PDF

问题描述

我有一个已排序且包含50条唯一行的Pandas DataFrame(命名为pdf_summary),每行对应一组特定的file_pages组合。源PDF路径如下:

pdf_path = "Documents/menu.pdf"

DataFrame结构示例:

file_namefile_pages_to_keep
1 - Monday, Wednesday1,3
2 - Monday1
3 - Monday, Tuesday, Wednesday1,2,3
......
50 - Friday5

需求:为每个file_name创建独立文件夹,并在其中生成仅包含对应file_pages_to_keep页面的PDF文件。预期输出示例:

"Documents/1 - Monday, Wednesday/1 - Monday, Wednesday.pdf"(仅包含源PDF的第1、3页)
解决方案

可以借助PyMuPDF(轻量高效的PDF处理库)、pandas和os模块实现需求,代码如下:

import pandas as pd
import fitz  # PyMuPDF
import os

# 源PDF路径
pdf_path = "Documents/menu.pdf"

# 遍历DataFrame的每一行
for idx, row in pdf_summary.iterrows():
    # 获取当前行的文件名和要保留的页面
    folder_name = row['file_name']
    pages_str = row['file_pages_to_keep']
    # 构建文件夹路径(放在Documents目录下)
    folder_path = os.path.join("Documents", folder_name)
    # 创建文件夹,已存在则跳过
    os.makedirs(folder_path, exist_ok=True)
    
    # 处理页面:将字符串转为整数列表,注意PDF索引从0开始,所以要减1
    target_pages = [int(p) - 1 for p in pages_str.split(',')]
    
    # 打开源PDF
    source_pdf = fitz.open(pdf_path)
    # 创建新的PDF对象
    new_pdf = fitz.open()
    
    # 逐页添加指定页面到新PDF
    for page_num in target_pages:
        new_pdf.insert_pdf(source_pdf, from_page=page_num, to_page=page_num)
    
    # 构建输出PDF路径
    output_pdf_path = os.path.join(folder_path, f"{folder_name}.pdf")
    # 保存新PDF
    new_pdf.save(output_pdf_path)
    # 关闭文件释放资源
    new_pdf.close()
    source_pdf.close()

代码说明

  • 文件夹创建:用os.makedirs配合exist_ok=True,避免重复创建文件夹时报错
  • 页面处理:将file_pages_to_keep的字符串按逗号分割,转成整数后减1(因为PyMuPDF的页面索引从0开始,而用户给出的是从1开始的页码)
  • PDF操作:insert_pdf方法可以精准提取指定页面,生成新PDF后保存到对应文件夹下

依赖安装

如果未安装PyMuPDF,可以通过pip安装:

pip install pymupdf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:15