我正在使用
pdfplumber
和 python 从以下 pdf 文件中提取数据
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。任何帮助将不胜感激。
似乎没有直接的方法可以使用
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
值。