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

如何使用pypdf提取指定PDF页面数据并导出为CSV?

从PDF第4-605页提取数据并转CSV的Python方案

第一步:安装所需依赖

在终端运行以下命令:

pip install pypdf pandas

第二步:完整可运行代码

将代码保存为pdf_to_csv.py,替换your_pdf_file.pdf为你的PDF文件路径:

from pypdf import PdfReader
import pandas as pd
import re

def clean_valor(text):
    # 统一VALOR列格式:去掉所有非数字字符,空值返回None
    if not text or text.strip() == "":
        return None
    cleaned = re.sub(r'[^\d]', '', text.strip())
    return int(cleaned) if cleaned else None

def extract_pdf_to_csv(pdf_path, start_page=4, end_page=605, output_csv="output.csv"):
    # 初始化PDF阅读器
    reader = PdfReader(pdf_path)
    # 转换页码:pypdf从0开始索引,第4页对应索引3,第605页对应索引604
    start_idx = start_page - 1
    end_idx = end_page - 1
    
    all_data = []
    # 遍历指定页码范围
    for page_num in range(start_idx, end_idx + 1):
        page = reader.pages[page_num]
        text = page.extract_text()
        if not text:
            continue
        
        # 按行分割文本(若PDF行分隔符为\n\r可自行调整)
        lines = text.split('\n')
        for line in lines:
            line = line.strip()
            if not line:
                continue
            
            # 按多空格拆分列(若PDF用其他分隔符,比如竖线,修改正则即可)
            columns = re.split(r'\s{2,}', line)
            # 补全空列(假设固定5列,可根据实际调整)
            while len(columns) < 5:
                columns.append(None)
            
            # 清洗VALOR列(假设是第3列,索引2,根据实际位置修改)
            if len(columns) > 2:
                columns[2] = clean_valor(columns[2])
            
            all_data.append(columns)
    
    # 转为DataFrame并设置列名(替换成你的实际列名)
    df = pd.DataFrame(all_data, columns=["COLUMN1", "COLUMN2", "VALOR", "COLUMN4", "COLUMN5"])
    # 删除全空行,保留部分空值的行
    df = df.dropna(how='all')
    
    # 导出CSV
    df.to_csv(output_csv, index=False, encoding='utf-8-sig')
    print(f"数据已导出到 {output_csv}")

# 调用函数
extract_pdf_to_csv("your_pdf_file.pdf")

关键部分说明

  1. 页码适配:pypdf的页面索引从0开始,代码已自动转换用户输入的页码范围。
  2. VALOR列清洗:不管是带点、空格的格式,都会被转换成纯数字,空值保留为None。
  3. 列拆分逻辑:默认用多空格拆分列,若你的PDF用其他分隔符(比如制表符、竖线),修改re.split的正则表达式即可。
  4. 空值处理:自动删除全空的行,部分空值的行会保留,你也可以用df.fillna("")将空值替换为空字符串。

注意事项

  • 如果PDF是扫描件(图片格式),pypdf无法提取文本,需要用OCR工具(比如pytesseract)处理。
  • 必须根据你的实际PDF结构,修改列名和VALOR列的索引位置(比如VALOR是第4列就改成columns[3])。
  • 确保PDF文件路径正确,且有读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:13:32