如何在google colaboratory上传数据集?

时间:2018-05-25 09:12:02

标签: python file-upload computer-vision google-colaboratory

我需要在google colaboratory上传图像数据集。它里面有子文件夹,里面包含图片。无论我在网上发现什么,都是单个文件。

from google.colab import files

uploaded = files.upload()

有什么办法吗?

2 个答案:

答案 0 :(得分:1)

要将数据上传到Colab,您有三种方法。

方法1

您可以直接在Colab UI中enter image description here上载文件或目录

数据保存在Colab本地计算机中。在我的实验中,有三个功能: 1)上传速度不错。 2)它会保留目录结构,但不会直接解压缩。您需要在Colab单元格中执行此代码

!makedir {dir_name}
!unzip {zip_file} -d {dir_name}

3)最重要的是,当Colab崩溃时,数据将被删除。

方法2

在Colab单元格中执行代码:

from google.colab import files
uploaded = files.upload()

在我的实验中,运行单元格时,它会显示上传按钮。当单元执行指示器仍在运行时,您选择一个文件。 1)执行后,文件名将出现在结果面板中。 2)刷新Colab文件,您将看到该文件。 3)或执行!ls,您将看到您的文件。如果不是,则文件上传失败。

方法3

如果您的数据来自kaggle,则可以使用Kaggle API将数据下载到Colab本地目录。

方法4

将数据上传到Google云端硬盘,您可以使用1)Google云端硬盘Web浏览器或2)云端硬盘API(https://developers.google.com/drive/api/v3/quickstart/python)。要访问驱动器数据,请在Colab中使用以下代码。

from google.colab import drive
drive.mount('/content/drive')

我建议将数据上传到Google云端硬盘,因为它是永久性的。

答案 1 :(得分:0)

您需要将数据集复制到Google云端硬盘中。然后获取DATA_FOLDER_ID。 最好的方法是打开Goog​​le云端硬盘中的文件夹并复制html地址的最后一部分。例如,链接的文件夹ID:

https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

然后,您可以创建本地文件夹并递归上传每个文件。

DATA_FOLDER_ID = 'xxxxxxxxxxxxxxxxxxxxxxxx'
ROOT_PATH = '~/you_path'
!pip install -U -q PyDrive
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

# 1. Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

# choose a local (colab) directory to store the data.
local_root_path = os.path.expanduser(ROOT_PATH)
try:
  os.makedirs(local_root_path)
except: pass

def ListFolder(google_drive_id, destination):
  file_list = drive.ListFile({'q': "'%s' in parents and trashed=false" % google_drive_id}).GetList()
  counter = 0
  for f in file_list:
    # If it is a directory then, create the dicrectory and upload the file inside it
    if f['mimeType']=='application/vnd.google-apps.folder': 
      folder_path = os.path.join(destination, f['title'])
      os.makedirs(folder_path)
      print('creating directory {}'.format(folder_path))
      ListFolder(f['id'], folder_path)
    else:
      fname = os.path.join(destination, f['title'])
      f_ = drive.CreateFile({'id': f['id']})
      f_.GetContentFile(fname)
      counter += 1
  print('{} files were uploaded in {}'.format(counter, destination))

ListFolder(DATA_FOLDER_ID, local_root_path)