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

使用pd.read_csv读取谷歌云端CSV文件出现异常结果求助

问题描述

作为Python纯新手,我尝试编写读取Google Drive上公共CSV数据的脚本,CSV内容很简单:

1,2,3

文件由MS Excel创建,经Notepad++编辑。我试了两种代码:

变体1:

import pandas as pd
url='https://drive.google.com/file/d/1WgaA_dIHYm3ogCUE4WDu1ocwgQSZ1Wc7/view?usp=sharing'
file_id = url.split('/')[-2]
dwn_url='https://drive.google.com/uc?id=' + file_id 
df = pd.read_csv(dwn_url)
print(df.head()))

变体2:

import pandas as pd
import requests
from io import StringIO

url='https://drive.google.com/file/d/1WgaA_dIHYm3ogCUE4WDu1ocwgQSZ1Wc7/view?usp=sharing'

file_id = url.split('/')[-2]
dwn_url='https://drive.google.com/uc?export=download&id=' + file_id
url2 = requests.get(dwn_url).text
csv_raw = StringIO(url2)
df = pd.read_csv(csv_raw)
print(df.head())

两种代码都报错:

pandas.errors.ParserError: Error tokenizing data. C error: Expected 90 fields in line 3, saw 217

用read_csv(dwn_url, on_bad_lines='skip')后,输出的是HTML和JS内容,显然Pandas读到的不是CSV文件,而是Google的验证页面。即使导入完全空的CSV也会出现同样情况,请问有什么解决办法?


解决方案

1. 先确认文件共享权限

这是最容易忽略的点:必须把你的Google Drive文件设置为**「任何人拥有链接均可查看」**:

  • 打开文件的共享设置
  • 把权限从「仅限特定用户」改成「知道链接的任何人」,权限级别设为「查看者」

2. 用gdown库简化下载(推荐)

gdown是专门用来下载Google Drive文件的Python库,比手动构造链接靠谱得多,先安装:

pip install gdown

然后用以下代码读取:

import pandas as pd
import gdown

file_id = '1WgaA_dIHYm3ogCUE4WDu1ocwgQSZ1Wc7'
url = f'https://drive.google.com/uc?id={file_id}'
output = 'temp.csv'
gdown.download(url, output, quiet=False)

# 读取CSV
df = pd.read_csv(output)
print(df.head())

3. 手动处理验证页面(不用第三方库)

如果不想额外安装库,需要处理Google可能弹出的验证页面(比如大文件或频繁访问时),可以通过会话保持和验证令牌解决:

import pandas as pd
import requests
from io import StringIO

file_id = '1WgaA_dIHYm3ogCUE4WDu1ocwgQSZ1Wc7'
url = f'https://drive.google.com/uc?export=download&id={file_id}'

session = requests.Session()
response = session.get(url, stream=True)

# 处理下载验证令牌
for key, value in response.cookies.items():
    if key.startswith('download_warning'):
        params = {'id': file_id, 'confirm': value}
        response = session.get(url, params=params, stream=True)
        break

# 读取并解析CSV
csv_content = response.content.decode('utf-8')
df = pd.read_csv(StringIO(csv_content))
print(df.head())

4. 先检查下载内容是否正确

在调用pd.read_csv之前,先打印response.text(或csv_content)看看是不是真的CSV内容。如果还是HTML,说明权限或链接有问题,回头检查共享设置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:51