You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tabula循环转换PDF为CSV时出现IndexError: list index out of range报错

报错根因
  • tabula.read_pdf() 执行后返回的是当前单份PDF文件中提取到的所有表格组成的列表,该列表的长度仅和当前PDF里的表格数量有关,和全局循环的文件序号没有关联。你用全局循环变量推导出来的file-1去索引这个单文件表格列表,当当前PDF的表格数量小于file值时,就会触发索引越界。你前2个PDF文件的表格数刚好匹配你当时的file-1值,到第三个文件不匹配就直接报错。
  • 遍历文件的逻辑冗余错误:range(len(filtered_files)) 生成的索引本身就是从0开始到列表长度减1,完全不需要额外减1,file-1会导致第一次循环直接取到列表最后一个文件,逻辑完全混乱。
修复后代码
import tabula
import os
import pandas as pd

# 过滤当前目录下所有PDF文件
filtered_files = [file for file in os.listdir() if file.endswith(".pdf")]

# 直接遍历每个PDF文件,不需要绕索引计算
for pdf_file in filtered_files:
    print(f"正在处理:{pdf_file}")
    # 提取当前PDF的所有表格
    df_list = tabula.read_pdf(pdf_file)
    # 跳过没有提取到表格的PDF,避免报错
    if not df_list:
        print(f"{pdf_file} 未识别到表格,跳过")
        continue
    # 适配多表格场景,每个表格单独存为CSV,不需要多表格的话可以直接取df_list[0]存储
    for idx, df in enumerate(df_list):
        csv_name = f"{pdf_file.rsplit('.',1)[0]}_表{idx+1}.csv"
        df.to_csv(csv_name, encoding='utf-8')
    print(f"{pdf_file} 处理完成")

内容的提问来源于stack exchange,提问作者user3011030

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 14:57:00