使用 Tabula 从 PDF 中提取表格

2024-04-20

我遇到了一个名为 Tabula 的很棒的图书馆,它几乎成功了。不幸的是,第一页上有很多无用的区域,我不希望 Tabula 提取这些区域。根据文档,您可以指定要从中提取的页面区域。但是,无用区域仅位于 PDF 文件的第一页,因此,对于所有后续页面,Tabula 将错过顶部部分。有没有办法指定区域条件only适用于 PDF 的第一页?

from tabula import read_pdf

df = read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages='all')

我正在尝试做类似的事情(解析银行对账单)并且遇到了同样的问题。到目前为止,我发现解决这个问题的唯一方法是单独解析每个页面。

唯一的问题是,这需要提前知道您的文件由多少页组成。目前我还没有找到如何直接使用 Tabula 执行此操作,因此我决定使用 pyPdf 模块来获取页数。

import pyPdf
from tabula import read_pdf

reader = pyPdf.PdfFileReader(open("C:\Users\riley\Desktop\Bank Statements\50340.pdf", mode='rb' ))
n = reader.getNumPages() 

df = []
for page in [str(i+1) for i in range(n)]:
    if page == "1":
            df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages=page))
    else:
            df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", pages=page))

请注意,有一些已知和未解决的问题 https://github.com/tabulapdf/tabula-java/issues/140单独阅读每一页或同时阅读所有页面时。

祝你好运!

2017 年 8 月 3 日编辑:

找到了一种更简单的方法来计算 pdf 的页数,而无需通过 pyPDf

import re
def count_pdf_pages(file_path):
    rxcountpages = re.compile(r"/Type\s*/Page([^s]|$)", re.MULTILINE|re.DOTALL)
    with open(file_path, "rb") as temp_file:
        return len(rxcountpages.findall(temp_file.read()))

其中 file_path 当然是你的文件的路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Tabula 从 PDF 中提取表格 的相关文章

  • LibreOffice 并行将 .docx 转换为 .pdf 效果不佳

    我有很多 docx 文件需要转换为 pdf 将它们一一转换需要很长时间 所以我编写了一个 python 脚本来并行转换它们 from subprocess import Popen import time import os os chdi
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • python array(10,1) 和 array(10,) 之间的区别

    我正在尝试将 MNIST 数据集加载到数组中 当我使用 X train y train X test y test mnist load data 我得到一个数组 y test 10000 但我希望它的形状为 10000 1 数组 1000
  • 为什么第二个 request.session cookies 返回空?

    我想使用 requests Session post 登录网站 但是当我已经登录主页 然后进入帐户页面时 看来cookies还没有保存 因为cookies是空的 而且我无法进入正确的帐户页面 import requests from bs4
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • 直接将 .aspx 转换为 .pdf [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • Django Forms 视图中的自定义错误消息

    这是我的观点 if request method POST form TeacherRegister request POST Gets school object from email domain email form email va
  • TinyMCE - 外部工具栏位置

    我正在尝试与 TinyMCE 合作创建一个多文本框 点击编辑类型的图形内容编辑器 我已经使用 TinyMCE 来添加和删除它们 定位它们并调整它们的大小 单击以编辑它们等等 但有一件事困扰着我 那就是工具栏 我有一个外部工具栏 我试图将其放
  • 检查元素是否在视图中,如果是,则添加类

    我想堆叠元素 当它们进入视图时 它会添加类 active 我不想删除该类 因此一旦添加它 它就会保留在那里 大概的概念 If default在滚动视图中添加类 active 因此 当您向下滚动时 它会在类进入视图时添加该类 在查看了类似的问
  • 模块化 AngularJS 应用程序:一个或多个 AngularJS 模块?

    我尝试使用 AngularJS 构建一个模块化应用程序 我的第一个想法是使用这种文件夹结构按功能对每个模块进行分组 core controllers js directives js app js modules users control
  • C++ 错误 C2040?

    错误信息 这是什么意思 我该如何解决它 错误 C2040 int 与 const char 2 的间接级别不同 Code include
  • 找不到方法 commandLine()

    我正在尝试将预构建 shell 脚本添加到我的 gradle Android Studio 构建中 我已添加以下内容app build gradle task prePreBuild lt lt commandLine ls preBuil
  • 根据列条件连接数据框行

    为了后续的讨论 我将参考下面的示例数据框 现在 我希望实现的是将所有相似的数据包时间分组 即所有 7s 12s 等 此外 PacketTime字段应包含最小值和最大值的差异 max PacketTime min PacketTime 以及F
  • Fortran90 数组将空白值读取为 null

    我正在读取外部文本文件的数据 30 行 7 列 每行用 分隔 我缺少表示为 的值 当我将数据读入二维数组时 缺失值被 0 00 替换 但数据中也有 0 00 值 当我计算平均值时 计数 项目数 n 显示为计数 缺失值的数量 我如何动态选择缺
  • 调试断言失败

    我不断遇到这种情况 Debug assertions failed 当我在调试模式下运行程序时出错 我尝试在 Visual C 网站上查找此错误 但这些解释对我来说太先进了 而且它们与我对问题的最佳猜测没有任何相似之处 我已经检查了我的代码
  • 使用 Java 查找句子中的确切单词

    我正在编写一个代码来识别文本中的国家 地区名称 我正在使用一本包含国家名称的字典India America Sri Lanka 我目前正在使用text contains key with key从字典中 然而 即使对于像这样的字符串 这也会
  • 在 C 语言中,stdout 缓冲区的大小是多少?

    今天我了解到 stdout 在设置为终端时是行缓冲的 并且在不同情况下是缓冲的 因此 在正常情况下 如果我使用 printf 而不终止 n 只有当缓冲区已满时 它才会打印在屏幕上 如何获得这个缓冲区的大小 它有多大 实际大小由各个实现定义
  • “SolidBrush”参数类型对于格式化属性“Foreground”无效。参数名称:值

    我尝试在调用方法中更改颜色文本 RichTextBox wpf 但我遇到了一些麻烦 我的麻烦是 SolidBrush 参数类型对于格式化属性 Foreground 无效 参数名称 值 My code MethodInvoker action
  • 如何从 2 个数组创建地图?

    我有一个字符串数组和一个整数数组 如何使用第一个作为键 第二个作为值来创建地图 val keys arrayOf butter milk apples val values arrayOf 5 10 42 val map Map
  • 滚动“返回顶部”链接时显示/隐藏 div

    我无法让我的 转到顶部 id arrow updiv 在打开时消失 例如页面顶部 在页面顶部我得到了 所以我想要arrow up div to visible show slow 当不在页面顶部时 var tmp window height
  • Spring中如何从WebRequest获取请求的URI?

    我正在使用以下方法处理 REST 异常 ControllerAdvice and ResponseEntityExceptionHandler在 Spring Rest Web 服务中 到目前为止 一切都工作正常 直到我决定添加URI路径
  • php 的内容长度标头被覆盖!

    我试图弄清楚为什么 php 的 Content Length 标头被覆盖 这是演示 php 获取标头的请求 curl I http someserver com demo php HTTP 1 1 200 OK Date Tue 19 Ju
  • 如何快速将一个float打包为4个字节?

    我一直在寻找一种在 WebGL 纹理上存储浮动的方法 我找到了一些解决方案 http aras p info blog 2009 07 30 encoding floats to rgba the final 在互联网上 但那些只处理 0
  • 在Angular2中,使用zone.run与changeDecotor.markForCheck()的优点

    我想知道使用其中一种比另一种有什么优点或缺点 constructor private app ApplicationRef private ref ChangeDetectorRef this ref markForCheck OR thi
  • 获取列名,其中值是 pandas 数据框中的内容

    我试图在每个时间戳找到数据帧中的列名称 其值与同一时间戳的时间序列中的列名称相匹配 这是我的数据框 gt gt gt df col5 col4 col3 col2 col1 1979 01 01 00 00 00 1181 220328 9
  • 使用 Tabula 从 PDF 中提取表格

    我遇到了一个名为 Tabula 的很棒的图书馆 它几乎成功了 不幸的是 第一页上有很多无用的区域 我不希望 Tabula 提取这些区域 根据文档 您可以指定要从中提取的页面区域 但是 无用区域仅位于 PDF 文件的第一页 因此 对于所有后续