Python中使用Tabula批量转PDF为CSV仅提取第一页的问题
提取PDF全部页面并转为CSV的修复方案
你的代码只提取第一页的原因很明确:tabula.read_pdf(f, pages='all')会返回一个DataFrame列表,每个元素对应PDF里的一页内容,但你用[0]只取了列表的第一个元素(也就是第一页),自然只导出了第一页的数据。
修改后的代码
import glob import pandas as pd import tabula # 注意路径里的反斜杠要转义,或者用原始字符串r'mypath\*.pdf' path = 'mypath\\*.pdf' for f in glob.glob(path): # 读取PDF所有页面,得到每页对应的DataFrame列表 page_dfs = tabula.read_pdf(f, pages='all') # 确保列表不为空(避免空PDF报错) if page_dfs: # 把所有页面的DataFrame纵向拼接成一个完整的DataFrame full_df = pd.concat(page_dfs, ignore_index=True) # 生成规范的CSV文件名(替换.pdf为.csv,而不是追加.csv) full_df.to_csv(f.replace('.pdf', '.csv'), index=False)
关键修改点
- 移除了
[0],获取所有页面的DataFrame列表 - 用
pd.concat()将多页数据合并成一个完整的DataFrame,ignore_index=True会重置行索引,避免不同页面的索引重复 - 优化了CSV文件名生成逻辑,从
xxx.pdf.csv改成更合理的xxx.csv - 增加了空列表判断,防止处理空PDF时抛出异常
内容的提问来源于stack exchange,提问作者6114617
相关产品推荐
相关产品推荐

