Python新手遇FileNotFoundError[WinError2]:PDF转Excel代码报错求助
解决Windows下tabula-py报FileNotFoundError的问题
核心原因
你遇到的FileNotFoundError大概率不是找不到PDF文件,而是tabula-py依赖的Java环境未安装或未配置——tabula底层调用Java版的tabula-java工具,Windows系统找不到Java执行文件时就会抛出这个错误。
解决步骤
1. 安装Java环境
下载并安装Java Runtime Environment(JRE)或Java Development Kit(JDK),版本建议1.8及以上:
- 可选OpenJDK(免费开源)或Oracle JDK
- 安装时务必勾选「Add to PATH」选项,若未勾选,后续需手动配置环境变量
2. 手动配置Java环境变量(若安装时未自动配置)
- 找到Java安装目录下的
bin文件夹,比如C:\Program Files\Java\jre1.8.0_381\bin - 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」的
Path中添加上述bin路径
3. 验证Java配置
打开命令提示符(cmd),输入:
java -version
若能显示Java版本信息,说明配置成功。
4. 重启环境
关闭并重新打开VS Code和Anaconda终端,确保环境变量生效。
额外检查与优化
- 检查PDF占用:确保PDF文件没有被其他程序(如Adobe Reader)打开,否则会导致无法读取
- 简化路径测试:可以把PDF放到桌面等短路径目录,用
r"C:\Users\shattv\Desktop\TestInvoice.pdf"测试,排除路径过长或特殊字符问题 - 更新tabula-py:执行命令更新到最新版本:
pip install --upgrade tabula-py - 修复代码逻辑:
tabula.read_pdf(pages="all")返回的是DataFrame列表,直接调用to_excel会报错,需调整代码:import tabula import pandas as pd file_path = r"C:\Users\shattv\anaconda3\envs\venv1\TestInvoice.pdf" oup = r"C:\Users\shattv\anaconda3\envs\venv1\test.xlsx" dfs = tabula.read_pdf(file_path, pages="all") # 单个表格写入 if len(dfs) == 1: dfs[0].to_excel(oup, index=False) # 多个表格写入不同Sheet else: with pd.ExcelWriter(oup) as writer: for idx, df in enumerate(dfs): df.to_excel(writer, sheet_name=f"Page_{idx+1}", index=False)
内容的提问来源于stack exchange,提问作者shattv
相关产品推荐
相关产品推荐

