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

使用Python requests获取哈佛Dataverse文件出现问号乱码求助

问题解决:Harvard Dataverse数据集提取乱码问题

你遇到的问号乱码,是因为目标文件是二进制压缩包,不是纯文本CSV,直接用r.text读取会导致编码解析错误,且写入CSV的方式也完全错误。以下是修正方案:

问题分析

  • 从响应头能看到,该文件的Content-Type为application/zip,属于二进制压缩文件,并非纯文本格式。
  • r.text会尝试用默认编码解析二进制内容,必然出现乱码;csv.writerows(r.text)会把字符串的每个字符拆成单独单元格,完全不符合CSV格式规范。

修正步骤

  1. 获取原始二进制响应内容,避免编码解析错误
  2. 解压压缩包,读取内部的CSV文件
  3. 用pandas直接加载CSV数据

修正后的代码

import requests
import pandas as pd
import zipfile
from io import BytesIO

url = "https://dataverse.harvard.edu/api/access/datafile/5856951"

# 发送请求获取二进制内容
r = requests.get(url)
# 检查请求是否成功
if r.status_code == 200:
    # 将二进制内容转为内存字节流,用于解压
    zip_stream = BytesIO(r.content)
    # 解压ZIP文件
    with zipfile.ZipFile(zip_stream, 'r') as zip_ref:
        # 获取压缩包内的文件名(假设包内只有一个CSV文件)
        csv_filename = zip_ref.namelist()[0]
        # 读取并加载CSV数据
        with zip_ref.open(csv_filename) as csv_file:
            df = pd.read_csv(csv_file)
            print("数据前10行:")
            print(df.head(10))
else:
    print(f"请求失败,状态码:{r.status_code}")

关键说明

  • 用r.content获取原始二进制数据,跳过编码解析环节,避免乱码
  • 通过BytesIO在内存中处理压缩包,无需先保存ZIP文件到本地(若需要本地备份,也可先将r.content写入ZIP文件再解压)
  • 直接用pandas读取解压后的CSV,省去手动写入文件的冗余步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:36:21