Tabula Python包提取PDF中单行表格返回空列表的解决方案问询
解决方案
方案1:调整tabula识别参数,放行单行表格
你遇到的问题核心原因是tabula底层默认会过滤行数小于2的识别结果,需显式指定放行单行的参数,配合固定列位置提升识别准确率:
# 替换为你自己测量的区域坐标、列分割坐标 df_list = tabula.read_pdf( DIRECTORY + file_name, pages='all', pandas_options={'header': None}, encoding="utf-8", area=[top, left, bottom, right], # 你之前用Adobe测量的表格区域参数 columns=[x1, x2, x3], # 每列分割线的x坐标,n列需要传n-1个分割值 guess=False, # 关闭自动表格检测,避免单行被判定为普通文本过滤 min_rows=1, # 核心参数,允许识别仅1行的表格 stream=True # 无框表格保留该参数,有框表格替换为lattice=True )
若使用旧版本tabula-py不支持min_rows参数,可替换为传java配置:
java_options=["-Dtabula.min.rows=1"]
方案2:兜底文本提取结构化
如果调整tabula参数后仍识别失败,可直接提取指定区域的原始文本再转DataFrame:
import fitz import pandas as pd doc = fitz.open(DIRECTORY + file_name) page = doc[0] # 替换为表格实际所在页码,页码从0开始计数 rect = fitz.Rect(x0, y0, x1, y1) # 替换为你测量的表格区域坐标 text = page.get_text("text", clip=rect).strip() # 按实际的文本分隔规则拆分,比如多空格、制表符等 row = [item.strip() for item in text.split() if item.strip()] # 替换为实际的表格列名 df = pd.DataFrame([row], columns=["列1", "列2", "列3"])
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

