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

Python读取在线PDF遇OSError及提取表格数据至列的求助

解决方案

1. 修复在线PDF读取错误

PyPDF2 的 PdfReader 不支持直接传入 HTTP URL,必须先将在线PDF下载到本地内存或磁盘。可以用 requests 库先获取PDF内容,再通过字节流传给 PdfReader:

import PyPDF2
import pandas as pd
import requests
from io import BytesIO
from PyPDF2 import PdfReader

# 下载在线PDF到内存
url = "http://www.meteo.gov.lk/images/mergepdf/20221004MERGED.pdf"
response = requests.get(url)
# 将响应内容转为字节流
pdf_stream = BytesIO(response.content)

# 读取PDF
reader = PdfReader(pdf_stream)
text = ""
for page in reader.pages:
    text += page.extract_text() + "\n"

2. 提取表格到Pandas列

直接用PyPDF2提取的纯文本很难拆分表格结构,推荐用专门处理PDF表格的库,比如 tabula-py(基于Java,需提前安装Java环境)或 camelot。以下是具体实现:

用tabula-py提取表格

步骤1:安装依赖

pip install tabula-py requests

注意:tabula-py 需要Java 8+环境,若未安装需先配置Java环境变量。

步骤2:提取第一页表格代码

import tabula

url = "http://www.meteo.gov.lk/images/mergepdf/20221004MERGED.pdf"
# 提取第一页的所有表格,返回DataFrame列表
tables = tabula.read_pdf(url, pages=1, multiple_tables=True)

# 取第一个表格(如果存在)
if tables:
    first_table = tables[0]
    print(first_table)
    # 可直接保存为CSV或进一步处理
    first_table.to_csv("first_table.csv", index=False)

用camelot提取表格

步骤1:安装依赖

pip install camelot-py[cv]

步骤2:提取第一页表格代码

import camelot

tables = camelot.read_pdf(url, pages=1)
first_table = tables[0].df
print(first_table)

这两个工具都能直接解析PDF中的表格结构,生成带列的Pandas DataFrame,比手动拆分纯文本高效得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:20:43