har*_*lli 7 python api dataset kaggle
我正在尝试从 Kaggle Competition state-farm-distracted-driver-detection下载数据
数据集具有以下目录结构
|-driver_imgs_list.csv
|-sample-submission.csv
|imgs
| |test
| |train
| |c0
| |c1
| |c2
| |-img_100029.jpg
| |-img_100108.jpg
Run Code Online (Sandbox Code Playgroud)
我只想下载 imgs/train/c2 文件夹。我知道如何下载完整数据集和特定文件,但我无法弄清楚如何使用 API 下载特定文件夹
最初我尝试使用 Kaggle CLI API,使用它我可以下载特定的图像如下
kaggle competitions download state-farm-distracted-driver-detection -f imgs/train/c2/img_100029.jpg
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下命令下载 c2 文件夹时,出现类似 File not found 的错误
kaggle competitions download state-farm-distracted-driver-detection -f imgs/train/c2
404 - Not Found
Run Code Online (Sandbox Code Playgroud)
是否有任何命令可以从 kaggle api 的竞赛中下载特定文件夹?
作为另一个试验,我使用 python 中的 Kaggle API 下载该文件夹
我的想法是,有一个名为“driver_imgs_list.csv”的文件,其中包含诸如 (c0,c1,c2..) 之类的类名及其相应的图像文件。因为我想下载 c2 类文件夹,所以我使用 Pandas 将 c2 类图像文件存储在一个数组中。然后我尝试使用 for 循环下载每个文件,如下所示
from kaggle.api.kaggle_api_extended import KaggleApi
import pandas as pd
api = KaggleApi()
api.authenticate()
data = pd.read_csv("driver_imgs_list.csv")
images = data[data["classname"] == "c2"]["img"] #It will give me all image file names under c2 folder
imgArray=[]
for i in images:
imgArray.append(i)
for i in imgArray:
file = "imgs/train/c2/{i}".format(i=i)
api.competition_download_file('state-farm-distracted-driver-detection',file,quiet = False,force = True)
Run Code Online (Sandbox Code Playgroud)
即使使用上面的代码,我也遇到了与找不到文件相同的错误,如下所示
HTTP response body: b'{"code":404,"message":"NotFound"}'
Run Code Online (Sandbox Code Playgroud)
如何使用 Kaggle CLI API 或从 python 下载特定文件夹
难道错误消息是真的,并且该文件确实不在数据集的文件夹中?
另一个想法是它与顺序(?)有关,因为我能够在使用.sort_values()图像名称时让您的代码运行Series:
data = pd.read_csv('driver_imgs_list.csv')
filenames = 'imgs/train/c2/' + data[data['classname'] == 'c2']['img'].sort_values()
for filename in filenames:
api.competition_download_file('state-farm-distracted-driver-detection', filename)
Run Code Online (Sandbox Code Playgroud)
然而,我只让它运行大约 10 个文件。因此,CSV 文件中的文件与数据集中实际可用的文件之间可能不匹配。