使用 python pdfplumber 抓取 pdf 表格,包括空单元格

问题描述 投票:0回答:1

我正在使用

pdfplumber
和 python 从以下 pdf 文件中提取数据

Data in the test pdf file


import pdfplumber
 

pdf_file = 'D:/Input/Book1.pdf'
pdf = pdfplumber.open(pdf_file)

page = pdf.pages[0]
text = page.extract_text()
table  = page.extract_tables()

for line in text.split("\n"):
    print(line)

当我使用

page.extract_tables()
时,我只获取行标题,而不获取表中的关联数据。

由于 extract_tables() 不起作用,我正在使用

page.extract_text()
逐行循环。但是,这个 extract_text() 在读取该行时忽略了表数据中的空单元格。

使用

extract_text()

时提取以下数据
Weekly test report with multiple lines of hedder of the each page of report
col1 col2 col3 Start End Col Group
Name Name Name Date Date Col5 Col6 Col7 Currency
123 ABC 26/8/2024 26/8/2024 1000 20000 26/8/2024 USD
456 DEF New 26/8/2024 2000 15000 27/8/2024 INR
789 GES DDD 26/8/2024 26/8/2023 4000 20/4/2024 AUD

我想使用 pdf 中的表格数据创建 df。任何帮助将不胜感激。

python pdf pdfplumber
1个回答
0
投票

似乎没有直接的方法可以使用

extract_tables()
访问表数据。

要阅读表格,我需要使用

extract_table()
table_settings

import os
import pandas as pd
import pdfplumber


pdf_file = 'D:/Input/Book1.pdf'

page_vertical_lines = [40,102,152,203,253,305,360,408,458,510]
table_settings={"vertical_strategy": "explicit", 
                "horizontal_strategy": "text"
                ,"explicit_vertical_lines": page_vertical_lines,
                }
pdf = pdfplumber.open(pdf_file)
df1 = pd.DataFrame(pdf.pages[0].extract_table(table_settings))

此代码从 pdf 文件中提取了所需的列数。

这里的挑战是获得

explicit_vertical_lines
位置

我已使用

matplotlib
库通过以下代码识别正确的位置。您需要根据您的报告栏调整位置。

import pdfplumber
import matplotlib.pyplot as plt

pdf_file = 'D:/Input/Book1.pdf'

with pdfplumber.open(pdf_file) as pdf:
    page = pdf.pages[0]
    im = page.to_image()
    
    vertical_lines = [40,102,152,203,253,305,360,408,458,510]
    for x in vertical_lines:
        im.draw_vline(x,stroke="blue",stroke_width=1)
    
    plt.imshow(im.annotated)
    plt.show()

当您运行此代码时,它会根据 pdf 上的

vertical_lines
值给出蓝线,如下图所示。根据您的需要调整
vertical_lines
值。

PDF page with blue lines

© www.soinside.com 2019 - 2024. All rights reserved.