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

使用PDFplumber提取PDF文本并拆分数据至Excel列的技术问题

解决PDFplumber提取文本后拆分费用行并导出Excel的问题

问题场景

使用PDFplumber爬取PDF数据时,已实现按行提取文本,但无法将类似Retail Rent 444,335.40 75.12 444,335.40 75.12的行拆分为独立列(费用名称、期间累计值、百分比等),需要将文字识别为费用项,后续数值对应不同字段,最终导出到Excel使每个内容对应单独单元格。

解决方案代码

import pdfplumber
import pandas as pd
import re

def extract_and_process_pdf(pdf_path):
    processed_data = []
    # 匹配带千分位逗号、小数点的数值正则表达式
    num_pattern = re.compile(r'\d{1,3}(?:,\d{3})*(?:\.\d+)?')
    
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            lines = page.extract_text().split('\n')
            for line in lines:
                stripped_line = line.strip()
                if not stripped_line:
                    continue  # 跳过空行
                
                # 提取当前行所有数值
                numeric_values = num_pattern.findall(stripped_line)
                # 提取费用名称:移除所有数值后清理多余空格
                expense_name = re.sub(num_pattern, '', stripped_line).strip()
                # 组合为一行数据
                processed_row = [expense_name] + numeric_values
                processed_data.append(processed_row)
    
    return processed_data

# 处理PDF并导出Excel
pdf_path = 'Sample_Numbers.pdf'
processed_data = extract_and_process_pdf(pdf_path)

# 根据实际业务定义列名,可按需调整
column_names = ['费用项', '期间累计值', '期间百分比', '年度累计值', '年度百分比']
# 转换为DataFrame,自动补全缺失值为NaN
df = pd.DataFrame(processed_data, columns=column_names)

# 导出到Excel文件
df.to_excel('费用数据导出.xlsx', index=False)

# 打印处理后的数据预览
for row in processed_data:
    print(row)

代码说明

  1. 数值匹配逻辑:使用正则表达式\d{1,3}(?:,\d{3})*(?:\.\d+)?精准匹配带千分位逗号和小数点的数值,兼容444,335.40、75.12这类格式。
  2. 拆分行数据:先提取行内所有数值,再移除数值部分得到费用名称,避免因费用名称含空格导致的拆分错误。
  3. Excel导出:借助pandas的DataFrame结构统一管理数据,导出时自动将每个字段对应到Excel的独立单元格,index=False避免生成额外的索引列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:17:00