Tabula Python2025年3月17日 | 阅读 8 分钟 简介通常,我们使用的数据不一定是 CSV 或 JSON 格式。数据可以存储在 PDF 文件中的表格形式。最直接的情况是,我们可以将表格复制粘贴到电子表格或文本编辑器中。但也有可能 PDF 中有多个结构相似的表格。在这种情况下,我们需要单独复制粘贴每个表格,这使得工作变得繁琐。 然而,为了减少这种枯燥的工作,Python 提供了一个开源库,也称为 **tabula-py**,它允许用户单独提取多个表格。在接下来的教程中,我们将学习 tabula 及其功能。 什么是 Tabula?Tabular 是 tabula-java 的一个基本包装器,它允许用户提取表格,并将 PDF 文件直接转换为 Data frames 或 JSON,使用 Python 编程语言。用户还可以从 PDF 中提取表格,并将其转换为 TSV、CSV 或 JSON 格式文件。 Tabula 是一个基于 图形用户界面 (GUI) 应用程序的工具;但是,**tabula-java** 是一个基于命令行用户界面 (CUI) 的工具。tabula-java 提供了 Ruby、R 和 NodeJS 的绑定,但不是 Python 的。因此,开发人员引入了 **tabula-py** 的概念,它提供了 Python 绑定。 现在,让我们了解谁使用 Tabula 以及如何安装它。 谁使用 Tabula?Tabula 是一个强大的工具,被各种规模的新闻机构用于支持调查性报道。这些**新闻机构**包括《伦敦泰晤士报》、ProPublica、《外交政策》、《纽约时报》、《民族报》(阿根廷)和《圣保罗先驱报》(明尼苏达州)。 Grassroots Organizations,如 SchoolCuts.org,也依赖 Tabula 将笨拙的文档转换为对公众友好的资源。 除了上述之外,还有来自其他背景的研究人员利用 Tabula 将他们的 PDF 报告转换为 Excel 电子表格、CSV 和 JSON 格式文件,并用于分析和数据库应用程序。 在 Python 中实现 Tabula在简要讨论了 Tabula 之后,让我们来了解一下它在 Python 中的实现。 安装库 由于 **tabula-py** 是 Python 的一个开源库,我们将使用 **pip** 安装程序来安装该库。 导入库 安装完成后,我们可以通过简单地导入库来验证它,如下所示 如果程序返回 **导入错误**,建议重新安装该包。 **tabula-py** 库提供了多种功能,例如读取 PDF 文件、读取 PDF 文件特定页面上的表格、读取 PDF 文件同一页面上的多个表格,或者将 PDF 文件直接转换为 CSV 文件。 让我们开始阅读 PDF 文件 读取 PDF 文件**tabula-py** 库允许用户使用名为 **read_pdf()** 的函数来读取 PDF 文件。 语法 参数 filename: **filename** 参数是我们希望从中读取数据的 PDF 文件的名称。 让我们将以下 PDF 数据表转换为 pandas Data Frame。 文件名:marksheet_table.py 页码:1
下面是一个示例,演示如何从 pdf 中提取数据。 示例 输出 Name English Physics Chemistry Biology Total 0 A 86 54 65 83 288 1 B 56 45 80 55 236 2 C 34 66 73 90 263 3 D 77 75 46 34 232 4 E 74 82 55 77 288 5 F 69 76 82 46 273 6 G 53 33 29 45 160 7 H 70 41 67 23 201 8 I 80 43 88 28 239 9 J 90 37 45 71 243 10 K 98 55 88 81 322 11 L 90 54 67 37 248 12 M 87 76 88 54 305 13 N 86 69 82 66 303 14 O 67 74 54 65 260 15 P 75 96 53 67 291 16 Q 45 87 80 45 257 17 R 44 66 49 78 237 18 S 78 39 78 80 275 19 T 56 54 77 86 273 20 U 43 90 64 77 274 21 V 95 88 66 55 304 22 W 64 67 86 80 297 23 X 82 56 45 65 248 24 Y 79 65 70 54 268 25 Z 83 54 40 75 252 说明 在上面的示例中,我们导入了所需的库,并定义了一个存储 pdf 数据文件地址的变量。然后,我们使用 **read_pdf()** 函数读取 pdf 中的数据并将其打印给用户。结果,数据表已成功读取。 注意:我们在 read_pdf() 函数中使用了 **pages** 参数来读取指定页面(s) 的数据。 让我们考虑另一个例子,打印特定页面(例如第 2 页)的表格。 示例 输出 Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252 说明 在上面的示例中,我们遵循了与之前相同的过程。但是,我们将 **pages** 参数设置为 2,并打印了指定页面上的第一个表格。结果,页面 2 上索引为零的表格已成功打印。 现在,让我们了解当 PDF 数据文件的同一页面上有多个表格时会发生什么。 处理 PDF 文件同一页面上的多个表格我们可以使用一个名为 **multiple_tables** 的附加参数来处理同一页面上的多个表格。 **multiple_tables** 参数接受一个布尔值,如果为 true,则 **read_pdf()** 函数将多个表格读取为独立的表格;如果为 false,则读取多个表格为一个单独的表格。 让我们考虑以下示例,演示如何将多个表格读取为独立的表格。 示例 输出 Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252 Name Position 0 K I 1 M II 2 V III 3 N IV 4 W V 说明 在以下示例中,我们再次导入了所需的库,并定义了存储 PDF 文件地址的变量。然后,我们使用了 **read_pdf()** 函数,并包含了 **multiple_tables** 参数,将其设置为 **True**。然后,我们分别打印了 PDF 文件第 2 页上存在的多个表格。 现在,让我们考虑一个示例来理解如何将多个表格读取为一个单独的表格。 示例 输出 Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252 26 Name Position 27 K I 28 M II 29 V III 30 N IV 31 W V 说明 在以下示例中,我们将 **multiple_tables** 参数设置为 **False**。结果,页面 2 上的表格被视为一个单独的表格。 将 PDF 文件直接转换为 CSV 文件借助 **tabula** 库中的 **convert_into()** 方法,我们可以将包含表格数据的 PDF 文件直接转换为 CSV 文件。 语法 让我们考虑以下示例,说明将 PDF 文件转换为 CSV 文件。 示例 输出 'pages' argument isn't specified.Will extract only from page 1 by default. The PDF file has been converted successfully. 说明 在上面的示例中,我们再次导入了所需的库,并定义了包含 PDF 文件地址的变量。然后,我们使用 **convert_into()** 方法将 PDF 文件转换为 CSV 文件,并打印了一条成功消息。 此外,我们还可以注意到程序返回了一个声明,说明没有指定 **“pages”** 参数。因此,默认情况下将提取页面 1 上的表格。 下一个主题Python 打印给定数字的质因数程序 |
我们请求您订阅我们的新闻通讯以获取最新更新。