我正在使用 PDFPlumber 将 PDF 提取到 Excel。我将文本分成几行,用空格分隔并识别以特定文本开头的行。问题是,这些行包含“最后一个,第一个 M”格式的名称,我无法弄清楚如何将这些名称保持在一起。我想抓住####,日期和日期(代码)左侧的文本块,然后将剩余的文本分配为代表名称的一列,但我真的不知道该怎么做它或者如果这是有道理的。
下面是我的代码以及数据如何在 PDF 上显示的示例:
PDF:*注意,SSN 字面上显示为 4 个#。此外,代码列只能是:S、E/D、E/S、F
SSN Name Code Date SSN Name Code Date
#### Wayne, Bruce T S 5/1/2021 #### Rodgers, Aaron E/S 12/01/2020
#### Vader, Darth E/D 11/01/2018 #### Miller, Kyle B F 10/01/2016
到目前为止我的代码:(错误,因为名称中的空格会创建额外的列)
import re
import parse
import pdfplumber
import pandas as pd
from collections import namedtuple
Line = namedtuple('Line', 'SSN Name Coverage_Code Start_Date SSN2 Name2 Coverage_Code2 Start_Date2')
company_re = re.compile(r'Group: ')
line_re = re.compile(r'####')
file = r'VBAInvoice.pdf'
lines = []
total_check = 0
with pdfplumber.open(file) as pdf:
pages = pdf.pages
for page in pdf.pages:
text = page.extract_text()
for line in text.split('\n'):
print(line)
comp = company_re.search(line)
if comp:
Group_Num, Company = comp.group(1), comp.group(2)
elif line_re.search(line):
items = line.replace('* *', '-').split()
lines.append(Line(*items))
df = pd.DataFrame(lines)
df.head()
df.info()
df.to_csv(r'invoices.csv', index=False)