如何在Python中从PDF中提取表格?代码示例

2021年11月17日14:18:26 发表评论 1,086 次浏览
Python如何从PDF中提取表格?本文带你学习如何使用 Camelot 和 tabula 库在 Python 中从 PDF 文件中提取表格,并将它们导出为多种格式,如 CSV、excel、Pandas 数据框和 HTML,并且包含一些Python从PDF中提取表格示例。 你想使用 Python 编程语言从 PDF 文件中导出表格吗?你来对地方了。 如何从PDF中提取表格?Camelot 是一个 Python 库和一个命令行工具,它使任何人都可以轻松提取PDF文件中的数据表,查看他们的官方文档Github 存储库。 而Tabula-py是 tabula-java 的简单 Python 包装器,它可以读取 PDF 中的表格。它使你能够将 PDF 文件转换为 CSV、TSV、JSON 甚至 Pandas DataFrame。 在本教程中,你将学习如何 使用 Python 中的Camelot 和tabula-py库提取PDF 中的表格 。 相关教程:如何在 Python 中从 PDF 中提取图像。 首先,你需要安装Camelot 库所需的依赖项才能正常工作,然后你可以使用命令行安装这些库:
pip3 install camelot-py[cv] tabula-py
请注意,你需要确保在你的计算机中正确安装了Tkinter和ghostscript(这是camelot 所需的依赖项)。

使用 Camelot 提取 PDF 表格

Python如何从PDF中提取表格?现在你已经安装了本教程的所有要求,打开一个新的 Python 文件并按照以下步骤操作:
import camelot

# PDF file to extract tables from
file = "foo.pdf"
我在当前目录中有一个名为“foo.pdf”的PDF文件(在此处获取),它是一个普通的 PDF 页面,其中包含一个如下图所示的表格:
如何在Python中从PDF中提取表格?代码示例
Python从PDF中提取表格示例如下,只是一个随机表,让我们用Python提取它:
# extract all the tables in the PDF file
tables = camelot.read_pdf(file)
read_pdf()函数提取PDF文件中的所有表格,让我们打印提取的表格数量:
# number of tables extracted
print("Total tables extracted:", tables.n)
这输出:
Total tables extracted: 1 
果然,它只包含一张表,将这张表打印为Pandas DataFrame:
# print the first table as Pandas DataFrame
print(tables[0].df)
输出:
              0            1                2                     3                  4                  5                 6
0  Cycle \nName  KI \n(1/km)  Distance \n(mi)  Percent Fuel Savings
1                                                  Improved \nSpeed  Decreased \nAccel  Eliminate \nStops  Decreased \nIdle
2        2012_2         3.30              1.3                  5.9%               9.5%              29.2%             17.4%
3        2145_1         0.68             11.2                  2.4%               0.1%               9.5%              2.7%
4        4234_1         0.59             58.7                  8.5%               1.3%               8.5%              3.3%
5        2032_2         0.17             57.8                 21.7%               0.3%               2.7%              1.2%
6        4171_1         0.07            173.9                 58.1%               1.6%               2.1%              0.5%
准确地说,让我们将表导出到CSV文件:
# export individually as CSV
tables[0].to_csv("foo.csv")
如何从PDF中提取表格?CSV是不是唯一的选择,你也可以使用to_excel()to_html()to_json()to_sqlite()方法,这里有一个例子导出到Excel电子表格:
# export individually as Excel (.xlsx extension)
tables[0].to_excel("foo.xlsx")
或者,如果你想一次性导出所有表:
# or export all in a zip
tables.export("foo.csv", f="csv", compress=True)
f参数表示文件格式,在本例中为"csv"。通过将compress参数设置为True,这将创建一个ZIP文件,其中包含CSV格式的所有表。 你还可以将表格导出为HTML格式:
# export to HTML
tables.export("foo.html", f="html")
或者你可以导出为其他格式,如JSON和Excel中 太。 值得注意的是,Camelot 仅适用于基于文本的PDF,而不适用于扫描文档。如果你可以在PDF查看器中单击并拖动以选择表格中的文本,那么它就是基于文本的PDF,因此这将适用于论文、书籍、文档等等!

使用 Tabula-py 提取 PDF 表格

Python如何从PDF中提取表格?打开一个新的 Python 文件并导入tabula:
import tabula
import os
我们只是使用read_pdf()方法来提取 PDF 文件中的表格(同样,在此处获取示例 PDF ):
# read PDF file
tables = tabula.read_pdf("1710.05006.pdf", pages="all")
我们设置pages"all"提取所有 PDF 页面中的表格,tabula.read_pdf() 方法返回一个 pandas 列表DataFrame,每个列表DataFrame对应一个表格。你还可以将 URL 传递给此方法,它会在提取表格之前自动下载 PDF。 如何从PDF中提取表格?下面的代码是迭代所有提取的表格并将它们保存为 Excel 电子表格的示例:
# save them in a folder
folder_name = "tables"
if not os.path.isdir(folder_name):
    os.mkdir(folder_name)
# iterate over extracted tables and export as excel individually
for i, table in enumerate(tables, start=1):
    table.to_excel(os.path.join(folder_name, f"table_{i}.xlsx"), index=False)
这将创建tables文件夹并将所有检测到的 Excel 格式的表格放入该文件夹中,尝试一下。 现在,如果你想从 PDF 文件中提取所有表格并将它们转储到单个CSV文件中怎么办?下面的代码正是这样做的:
# convert all tables of a PDF file into a single CSV file
# supported output_formats are "csv", "json" or "tsv"
tabula.convert_into("1710.05006.pdf", "output.csv", output_format="csv", pages="all")
Python从PDF中提取表格示例:如果你有多个 PDF 文件,并且想对所有这些文件运行上述内容,则可以使用convert_into_by_batch()方法:
# convert all PDFs in a folder into CSV format
# `pdfs` folder should exist in the current directory
tabula.convert_into_by_batch("pdfs", output_format="csv", pages="all")
这将查看pdfs文件夹并为该文件夹中的每个 PDF 文件输出一个 CSV 文件。

结论

Python如何从PDF中提取表格?对于大文件,camelot库的性能往往优于tabula-py。但是,有时你会遇到NotImplementedError使用camelot库的某些 PDF 文件,你可以使用tabula-py作为替代。请注意,这不会将图像字符转换为数字文本,如果你愿意,可以使用 OCR 技术将图像光学字符转换为可以在 Python 中操作的实际文本,以下教程可以为你提供很大帮助:
  • Python 中的光学字符识别 (OCR)
  • 如何使用 Python 从 PDF 文件中的图像中提取文本
以下是一些相关的 PDF 教程,可能会对你的工作有所帮助:
  • 如何使用 Python 突出显示和编辑 PDF 文件中的文本
  • 如何在 Python 中从 PDF 中提取图像
  • 如何在 Python 中将 PDF 转换为图像
如需完整列表,请查看类别页面。 好的,本教程就到这里,查看 camelot 官方文档tabula-py 官方文档以获取更多详细信息。
木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: