【问题标题】:How to download a file from Kaggle and work on it in python如何从 Kaggle 下载文件并在 python 中处理它
【发布时间】:2021-09-01 20:01:31
【问题描述】:

我想在 python 中从 Kaggle 下载一个数据集,然后处理它。当我点击下载按钮时,在此页面上说https://www.kaggle.com/quora/question-pairs-dataset

我的浏览器正在加载一个 zip 文件。但是,如果我在 python 中这样做

import requests, zipfile, io
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall(os.getcwd())

我得到了错误

Traceback (most recent call last):
  File "C:\Users\u\Documents\Maths\Code\Variational Auto Encoders\VAE_text_generation.py", line 33, in <module>
    z = zipfile.ZipFile(io.BytesIO(r.content))
  File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1257, in __init__
    self._RealGetContents()
  File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1324, in _RealGetContents
    raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file

从 url 获取文件的任何解决方案 - 如果需要,解压缩 - 并获取下载文件的名称以便能够处理它?

编辑还测试了以下不会产生错误但文件不是我期望的 .csv 和 .txt 的文件,可能是因为它们尚未解压缩或由于缺少权限而无法正确上传。

from urllib.request import urlretrieve

def report(num, size, total):
    print(num*size, '/', total)

# get kaggle data 
urlretrieve("https://www.kaggle.com/quora/question-pairs-dataset/download","train.csv",reporthook=report)
TRAIN_DATA_FILE = os.getcwd() + 'train.csv' 

## get glove 

urlretrieve("https://www.kaggle.com/watts2/glove6b50dtxt/download",
    "glove.txt",reporthook=report)
GLOVE_EMBEDDING = os.getcwd() + 'glove.txt'

【问题讨论】:

  • 检查 r.content 包含的内容。我相信你需要登录 Kaggle 才能下载文件。
  • 我可以在没有密码的情况下获得此数据集的任何其他地方吗?
  • @kiriloff:正如@mechanical_meat 所说,您需要登录 kaggle 或使用 Kaggle.com 的个人资料设置中提供的“API 令牌”。然后您可以使用 Kaggle 命令 (pip install kaggle) 使用下载的令牌 (kaggle datasets download -d quora/question-pairs-dataset) 下载数据集。如果您对此感到满意,我可以发布如何执行此操作的答案。

标签: python python-3.x request wget


【解决方案1】:

zipfile.BadZipFile: File is not a zip file

很明显你得到的不是 ZIP 文件,Content-Type 响应头对于确定你得到了什么很有用,我做了

import requests
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
print(r.headers['Content-Type'])

输出

text/html; charset=utf-8

所以这是 HTML 页面,因为 我的浏览器正在加载一个 zip 文件 我怀疑访问此资源需要登录,否则您将被重定向到允许登录的页面。制作 requests基于下载的工作,你需要了解 Kaggle 是如何进行检查的并遵守它。

【讨论】:

    【解决方案2】:

    首先尝试使用response.raw.decode_content = True

    像这样:

    import requests, zipfile, io
    
    response = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
    response.raw.decode_content = True
    z = zipfile.ZipFile(io.BytesIO(response.content))
    z.extractall(os.getcwd())
    

    【讨论】:

    • 如何使用我喜欢的名称命名文件,或者找到解压缩文件的名称?
    • 它以同样的方式崩溃
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2020-10-21
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多