问题很简单:我在gDrive上有一些数据,例如在 /项目/ my_project / my_data *。

我也有一个简单的笔记本在gColab。

所以,我想做的是:

for file in glob.glob("/projects/my_project/my_data*"):
    do_something(file)

不幸的是,所有的例子(例如https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynb)都建议只将所有必要的数据加载到笔记本中。

但是,如果我有很多数据,就会很复杂。 有没有解决这个问题的机会?

谢谢你的帮助!


当前回答

编辑:截至2020年2月,现在有一个自动挂载驱动器的一流UI。

首先,打开左边的文件浏览器。它会显示一个“Mount Drive”按钮。一旦点击,你会看到一个权限提示来挂载驱动器,然后当你返回笔记本电脑时,你的驱动器文件就会出现,没有任何设置。完成的流程如下所示:

原始答案如下。(这同样适用于共享笔记本电脑。)

您可以通过运行以下代码片段挂载您的谷歌驱动器文件:

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

然后,您可以在文件浏览器侧面板或使用命令行实用程序与您的Drive文件进行交互。

这是一个笔记本的例子

其他回答

您可以简单地使用屏幕左侧的代码片段。 在这里输入图像描述

插入“在虚拟机中挂载谷歌驱动器”

运行代码并复制粘贴URL中的代码

然后使用!ls检查目录

!ls /gdrive

在大多数情况下,你会在“/gdrive/My drive”目录下找到你想要的东西。

你就可以这样行:

from google.colab import drive
drive.mount('/gdrive')
import glob

file_path = glob.glob("/gdrive/My Drive/***.txt")
for file in file_path:
    do_something(file)
from google.colab import drive
drive.mount('/content/drive')

这对我来说是完美的 我后来能够使用操作系统库来访问我的文件,就像我在我的PC上访问它们一样

我很懒,我的记忆力很差,所以我决定创建一个更容易记忆和输入的easycolab:

import easycolab as ec
ec.mount()

确保首先安装它:!pip install easycolab

mount()方法基本上实现了这一点:

from google.colab import drive
drive.mount(‘/content/drive’)
cd ‘/content/gdrive/My Drive/’

从谷歌colab笔记本中提取谷歌Drive zip,例如:

import zipfile
from google.colab import drive

drive.mount('/content/drive/')

zip_ref = zipfile.ZipFile("/content/drive/My Drive/ML/DataSet.zip", 'r')
zip_ref.extractall("/tmp")
zip_ref.close()

我写了一个类来下载所有的数据到。’在colab服务器中的位置

整个事情可以从这里拉https://github.com/brianmanderson/Copy-Shared-Google-to-Colab

!pip install PyDrive


from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
import os

class download_data_from_folder(object):
    def __init__(self,path):
        path_id = path[path.find('id=')+3:]
        self.file_list = self.get_files_in_location(path_id)
        self.unwrap_data(self.file_list)
    def get_files_in_location(self,folder_id):
        file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList()
        return file_list
    def unwrap_data(self,file_list,directory='.'):
        for i, file in enumerate(file_list):
            print(str((i + 1) / len(file_list) * 100) + '% done copying')
            if file['mimeType'].find('folder') != -1:
                if not os.path.exists(os.path.join(directory, file['title'])):
                    os.makedirs(os.path.join(directory, file['title']))
                print('Copying folder ' + os.path.join(directory, file['title']))
                self.unwrap_data(self.get_files_in_location(file['id']), os.path.join(directory, file['title']))
            else:
                if not os.path.exists(os.path.join(directory, file['title'])):
                    downloaded = drive.CreateFile({'id': file['id']})
                    downloaded.GetContentFile(os.path.join(directory, file['title']))
        return None
data_path = 'shared_path_location'
download_data_from_folder(data_path)