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

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)

输出:
0123456 0Cycle \nNameKI \n(1/km)Distance \n(mi)Percent Fuel Savings 1Improved \nSpeedDecreased \nAccelEliminate \nStopsDecreased \nIdle 22012_23.301.35.9%9.5%29.2%17.4% 32145_10.6811.22.4%0.1%9.5%2.7% 44234_10.5958.78.5%1.3%8.5%3.3% 52032_20.1757.821.7%0.3%2.7%1.2% 64171_10.07173.958.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 官方文档以获取更多详细信息。

    推荐阅读