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

使用Kaggle API下载数据集时遇MemoryError/UnicodeDecodeError的解决办法

Kaggle API下载headwater/Camels数据集崩溃问题

问题场景

尝试用Kaggle API在本地下载headwater/Camels数据集,运行代码时程序崩溃,代码如下:

api = kaggle.KaggleApi(json_str)
api.authenticate()
api.datasets_download(owner_slug='headwater', dataset_slug='Camels')

报错信息

Windows系统

test_dload_archive.py:8: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\venv\lib\site-packages\kaggle\api\kaggle_api.py:1494: in datasets_download
    (data) = self.datasets_download_with_http_info(owner_slug, dataset_slug, **kwargs)  # noqa: E501
..\venv\lib\site-packages\kaggle\api\kaggle_api.py:1563: in datasets_download_with_http_info
    return self.api_client.call_api(
..\venv\lib\site-packages\kaggle\api_client.py:329: in call_api
    return self.__call_api(resource_path, method,
..\venv\lib\site-packages\kaggle\api_client.py:161: in __call_api
    response_data = self.request(
..\venv\lib\site-packages\kaggle\api_client.py:351: in request
    return self.rest_client.GET(url,
..\venv\lib\site-packages\kaggle\rest.py:247: in GET
    return self.request("GET", url,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <kaggle.rest.RESTClientObject object at 0x000001B1FAE01D80>
method = 'GET'
url = 'https://www.kaggle.com/api/v1/datasets/download/headwater/Camels'
query_params = []
headers = {'Accept': 'file', 'User-Agent': 'Swagger-Codegen/1/python'}
body = None, post_params = {}, _preload_content = True, _request_timeout = None
……
            if six.PY3:
>               r.data = r.data.decode('utf8')
E               MemoryError

..\venv\lib\site-packages\kaggle\rest.py:235: MemoryError

Linux系统

if six.PY3:
>               r.data = r.data.decode('utf8')
E               UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcb in position 14: invalid continuation byte

推测原因

问题源于大文件下载时,Kaggle API默认将整个文件加载到内存中尝试以UTF-8解码,导致内存不足或二进制文件解码错误。

解决方法

方法1:指定路径直接保存文件(推荐)

修改代码,通过path和filename参数让API直接将下载的压缩包写入本地文件,避免加载到内存:

api = kaggle.KaggleApi(json_str)
api.authenticate()
# 将文件保存到当前目录下的camels.zip
api.datasets_download(owner_slug='headwater', dataset_slug='Camels', path='.', filename='camels.zip')

该方式采用流式写入,内存占用极低,同时跳过了不必要的UTF-8解码步骤。

方法2:使用Kaggle命令行工具下载

如果Python API仍有问题,直接用Kaggle命令行工具下载,同样是流式处理:

kaggle datasets download -d headwater/Camels

下载完成后手动解压即可。

方法3:临时修改Kaggle库文件(不推荐)

若必须使用Python API且无法修改代码逻辑,可临时修改kaggle/rest.py中报错的解码逻辑:
找到对应行(约235行),注释掉UTF-8解码代码:

# if six.PY3:
#     r.data = r.data.decode('utf8')

注意:此方法会修改第三方库文件,更新Kaggle API后会失效,仅作临时应急用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:43:14