Die*_*nig 21 python kaggle google-colaboratory
我正在尝试将 kaggle imagenet 对象本地化挑战数据下载到 google colab 中,以便我可以使用它来训练我的模型。Kaggle 使用 API 来轻松快速地访问他们的数据集。( https://github.com/Kaggle/kaggle-api ) 但是,在 google colab 中调用命令“kaggle Competitions download -c imagenet-object-localization-challenge”时,找不到 kaggle.json 文件包含我的用户名和 api 密钥。
运行 jupyter notebook 时,我的 Mac 上没有出现此问题,但由于我想将 google 的 gpu 用于我的模型,因此我开始使用 google colab。因为kaggle API 期望用户名和api-key 位于位于.kaggle 目录的kaggle.json 文件中,所以我首先创建了目录.kaggle,然后创建了文件kaggle.json,我在其中写入了我的用户名和api-密钥(下面的示例不显示我的用户名和 api 密钥)。然后我尝试配置我的 json 文件的路径,以便在调用 kaggle 下载命令时使用 kaggle。
!pip install kaggle
!mkdir .kaggle
!touch .kaggle/kaggle.json
api_token = {"username":"username","key":"api-key"}
import json
import zipfile
import os
with open('/content/.kaggle/kaggle.json', 'w') as file:
json.dump(api_token, file)
!chmod 600 /content/.kaggle/kaggle.json
!kaggle config path -p /content
Run Code Online (Sandbox Code Playgroud)
但是,在运行最后一个命令时,出现错误:
IOError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method.
Run Code Online (Sandbox Code Playgroud)
我的目标是使用以下命令从 kaggle 获取数据集:
!kaggle competitions download -c imagenet-object-localization-challenge
os.chdir('/content/competitions/imagenet-object-localization-challenge')
for file in os.listdir():
zip_ref = zipfile.ZipFile(file, 'r')
zip_ref.extractall()
zip_ref.close()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么 kaggle API 找不到我的 json 文件。如何在 google colab 中使用 API?
Ego*_*eev 17
根据kaggle api 文档,凭据 json 正在寻找的位置是~/.kaggle/kaggle.json因为 google colab 环境是基于 Linux 的。在您的代码段中,您尝试配置path参数,但它不用于查找凭证 json:
- 路径:下载文件的文件夹,默认为当前工作目录
因此,google colab 环境的完整工作片段将是:
!mkdir ~/.kaggle
!touch ~/.kaggle/kaggle.json
api_token = {"username":"username","key":"api-key"}
import json
with open('/root/.kaggle/kaggle.json', 'w') as file:
json.dump(api_token, file)
!chmod 600 ~/.kaggle/kaggle.json
Run Code Online (Sandbox Code Playgroud)
然后一些api调用像
!kaggle datasets download -d datamunge/sign-language-mnist
Run Code Online (Sandbox Code Playgroud)
正如错误所说,您需要将 kaggle.json 放在正确的位置。
尝试:
!mv .kaggle /root/
Run Code Online (Sandbox Code Playgroud)
然后再次运行您的代码。
我自己的方法,如果你想最小化“!” 除了上面 Egor B Eremeev 的回答。
根据您的用例,这可能是有益的,并且从长远来看,如果您正在编写脚本,则会导致更清晰的代码。
import json
import os
from pathlib import Path
# your api key
api_key = {
'username':"username" ,
'key':"some_api_key"}
# uses pathlib Path
kaggle_path = Path('/root/.kaggle')
os.makedirs(kaggle_path, exist_ok=True)
# opens file and dumps python dict to json object
with open (kaggle_path/'kaggle.json', 'w') as handl:
json.dump(api_key,handl)
os.chmod(kaggle_path/'kaggle.json', 600)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13569 次 |
| 最近记录: |