



1.用pdfminer提取数据,打印出来有些数据没有提取到,是什么原因呢
2.后续想生成excel文件,但是无法识别table,另外,生成出来的文件怎么切割到每一个单元格呢




关注引自免费微信小程序:皆我百晓生
针对您的问题,我会分两部分进行解答:首先解决PDF数据提取不完整的问题,然后处理Excel文件创建与数据写入。
问题1:PDF数据提取不完整
在您提供的代码中,似乎出现了混淆。您尝试从text变量中提取生产指令号,但在循环中使用了未定义的table变量。这可能是导致某些数据未被正确提取的原因。为了解决这个问题,我们需要确保正则表达式匹配的是正确的字符串,并且在正确的地方使用提取结果。
这里是一个修正后的版本,它将提取所有生产指令号并将其存储在一个列表中,同时会处理缺失值的情况:
import re
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams
# 提取PDF中的文本信息
with open('外协-汇鼎(299215.5).pdf', 'rb') as file:
text = extract_text(file, laparams=LAParams(line_margin=0.5)) # 增加行间距参数,提高提取准确率
# 定义正则表达式
regex = r"生产指令号:(.*?)(?:\n|$)" # 使用非贪婪匹配,并考虑换行符作为结束符
# 提取生产指令号
xinyongcodes = re.findall(regex, text)
# 打印提取的结果
for i, code in enumerate(xinyongcodes, start=1):
if code.strip(): # 过滤掉空白项
print(f"第{i}个生产指令号:{code.strip()}")
这段代码首先增加了行间距参数laparams=LAParams(line_margin=0.5),这有助于提高PDF文本的提取准确性。然后,在正则表达式中使用了非贪婪匹配(.*?),以防止因贪婪匹配而错过下一个匹配项。最后,通过检查提取的每个生产指令号是否为空白,过滤掉了无效的条目。
问题2:生成Excel文件并写入数据
在修复了PDF数据提取后,我们可以继续处理生成Excel文件的部分。以下是修改后的代码,用于将提取的数据写入Excel文件,并确保每个元素都在单独的单元格内:
import re
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams
import openpyxl
# 提取PDF中的文本信息
with open('外协-汇鼎(299215.5).pdf', 'rb') as file:
text = extract_text(file, laparams=LAParams(line_margin=0.5))
# 定义正则表达式
regex = r"生产指令号:(.*?)(?:\n|$)"
xinyongcodes = re.findall(regex, text)
# 创建一个新的Excel工作簿
workbook = openpyxl.Workbook()
sheet = workbook.active
# 写入数据到Excel
row_num = 1
for code in xinyongcodes:
if code.strip():
sheet.cell(row=row_num, column=1, value=code.strip())
row_num += 1
# 保存Excel文件
workbook.save(filename='luomiqi1.xlsx')
这个版本的代码创建了一个新的Excel工作簿,然后遍历提取的生产指令号,并将它们分别写入到单独的单元格中。每提取一个生产指令号,就会自动跳转到下一行。最后,保存Excel文件到指定的位置。
请注意,这个示例仅针对提取生产指令号这一列数据。如果您有其他列需要提取,可以按照类似的方法添加更多的正则表达式和逻辑。