_求解怎么处理在提取pdf中的表格跨页问题
用chatgpt跑的代码总解决不了。。
以下是代码:
import pdfplumber
import os
import re
import pandas as pd
# 创建一个新的 DataFrame 以保存提取的数据
data = {
'时间': [],
'基金公司': [],
'产品名称': [],
'投资reits名称': [],
'持有份额': [],
'公允价值': [],
'占基金总净值比例(%)': []
}
# 设置 PDF 文件夹路径
pdf_folder_path = '/Users/xueminchun/Desktop/中泰Reits行研实习/汇添富FOF季报'
# 处理每个 PDF 文件
for pdf_file_name in os.listdir(pdf_folder_path):
if pdf_file_name.endswith('.pdf'):
pdf_file_path = os.path.join(pdf_folder_path, pdf_file_name)
# 打开 PDF 文件
with pdfplumber.open(pdf_file_path) as pdf:
# 处理每一页
for page_number in range(len(pdf.pages)):
current_page = pdf.pages[page_number]
text = current_page.extract_text()
# 1. 提取“时间”列表
match_time = re.search(r'2023年第[34]季度报告', text)
if match_time:
data['时间'].append(match_time.group())
else:
data['时间'].append(None)
# 2. 提取“基金公司”列表
match_fund_company = re.search(r'基金管理人:\s*(\S+)', text)
if match_fund_company:
data['基金公司'].append(match_fund_company.group(1))
else:
data['基金公司'].append(None)
# 3. 提取“产品名称”列表
lines = text.split('\n')
for i, line in enumerate(lines):
if 'FOF' in line:
product_name_match = re.search(r'^(.*?FOF)', line)
product_name = product_name_match.group(1).strip() if product_name_match else None
data['产品名称'].append(product_name)
break
else:
data['产品名称'].append(None)
# 处理“6.1.1”部分的数据提取
if "6.1.1" in text:
tables = current_page.extract_tables()
for table in tables:
for row in table[1:]: # 跳过表头
# 确保行数据长度一致,不足的部分用空值填充
while len(row) < 6:
row.append("") # 使用空字符串填充不足的部分
data['投资reits名称'].append(row[2])
data['持有份额'].append(row[3])
data['公允价值'].append(row[4])
data['占基金总净值比例(%)'].append(row[5])
# 将最终的数据保存为 DataFrame
df = pd.DataFrame(data)
print(df)
# 保存 DataFrame 到 Excel 文件
excel_path = 'extracted_data.xlsx'
df.to_excel(excel_path, index=False)
print(f'提取的数据已保存到 {excel_path}')
有的pdf中的表格是跨页的
如图: