首页 > 解决方案 > 用于 PDF 到 Excel 的 Python 和 PDFPlumber

问题描述

我正在使用 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)

标签: pythonpdfplumber

解决方案


推荐阅读