如何用Python正则提取PDF中的App编号与名称并写入Excel?
PDF内容提取与Excel写入问题修正建议
问题背景
需要从PDF中提取两类信息并写入CSV(可直接用Excel打开):
#后的5位数字作为App编号(如88876)-后第一个逗号前的内容作为App名称(如Sample1)
样本PDF内容:
#88876 - Sample1, GTRHEUSKYTH, -99WED,-0098B
#99945 - SAMPLE2, DJWHVDFWHEF, -8876D,-3445G
原代码存在的核心问题:
- 无意义的外层循环
range(1,100)会重复处理同一个PDF99次 - 正则匹配精度不足,且未将编号与名称一一对应
- CSV写入逻辑错误,仅输出编号且格式不符合要求
修正后的代码
import PyPDF2 import re import csv # 定义PDF路径 pdf_path = r"C:\Users\merge.pdf" # 读取PDF并提取数据 with open(pdf_path, 'rb') as pdf_obj: pdf_reader = PyPDF2.PdfFileReader(pdf_obj) total_pages = pdf_reader.getNumPages() # 初始化数据容器,先写入表头 app_records = [["App_number", "App_name"]] for page_idx in range(total_pages): page_content = pdf_reader.getPage(page_idx).extractText() # 用正则一次性匹配整行,确保编号与名称一一对应 match_pattern = r'#(\d{5}) - ([^,]+),' matched_data = re.findall(match_pattern, page_content) app_records.extend(matched_data) # 将数据写入CSV with open("out.csv", "w", newline="", encoding="utf-8") as csv_file: csv_writer = csv.writer(csv_file) csv_writer.writerows(app_records)
关键优化说明
- 移除无效循环,用
with语句自动管理文件句柄,避免资源泄漏 - 改用整行匹配正则
r'#(\d{5}) - ([^,]+),',精准捕获5位编号和逗号前的名称,保证两组数据严格对应 - 添加CSV表头,确保Excel打开时列名清晰
- 使用
utf-8编码写入,避免中文名称乱码问题 - 先收集所有页面数据再一次性写入,提升处理效率
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

