首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以解析PDF文件,使用pdfplumber

难以解析PDF文件,使用pdfplumber
EN

Stack Overflow用户
提问于 2020-05-19 23:27:35
回答 1查看 267关注 0票数 0

我正在尝试解析季度投资报表,以将交易导入Quicken,因为我的提供商(联邦政府的TSP)不支持在线下载。我想我已经知道如何创建一个可以用于快速导入的"qif“文件了。

我使用的是Python 3.8和pdfplumber。下面是pdf中其中一页的快照。

我需要从"Transaction Detail By Source“中解析具有过帐日期的事务。我需要的基金名称,以及与其他人张贴日期的交易。这是我的简单Python代码-

代码语言:javascript
复制
import pdfplumber
with pdfplumber.open(r'C:\Users\ra_d\\statements\Investments\TSP\1Q 2011.pdf') as pdf:
for x in pdf.pages :
    print (x.extract_text())
    #print (x.extract_words())
    #print (x.extract_tables())

好消息是,我可以解析pdf,并为图像中的部分生成以下输出-

代码语言:javascript
复制
TRANSACTION DETAIL BY SOURCE
Agency
Payroll Posting Automatic Agency
Office Date Transaction Type Employee (1%) Matching Total
Beginning Balance $0.00 $0.00 $0.00 $0.00
12400001 03/22/11 Auto Enrollment Contribution             69.00 23.00 69.00 161.00
Increase/Decrease in Value 0.05 0.02 0.05 0.12
Ending Balance $69.05 $23.02 $69.05 $161.12
TRANSACTION DETAIL BY FUND
Government Securities Investment (G) Fund                   
Number       
Posting Transaction Share     of          Dollar      
Date Transaction Type Amount Price Shares Balance

Beginning Balance $13.4882 0.0000 $0.00
03/22/11 Auto Enrollment Contribution             $161.00 13.5752 11.8599
Ending Balance $13.5854 11.8599 $161.12

当我使用extract_tables()函数时,我得到空格。

因此,我正在寻找关于如何改进这种解析的建议。我需要清楚地获取头部和它们的值,以便准确地处理它们。

非常感谢。RD

EN

回答 1

Stack Overflow用户

发布于 2021-03-03 04:07:26

代码语言:javascript
复制
def parser(filepath):
    L = []
    pdf = pdfplumber.open(filepath)
    for i in range(15):
        page = pdf.pages[i]
        try:
            table = page.extract_table()
            df = pd.DataFrame(table)
            if df.shape[0] > 1:
                df = df.drop([0,2,5,6,8], axis=1)
                for i in range(len(df)):
                    if df.iloc[i][4] != None:
                        df.iloc[i][3] = df.iloc[i][4]
                df = df.drop([4], axis=1)
                L.append(df)
            if "Всего" in table[-1]:
                break
        except Exception:
            continue
    df = pd.concat(L)
df.columns = ["Раздел", "Слова", "Важность"]
df.reset_index(drop=True)
df = df.drop([0,1])
return df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61894786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档