问题很简单:我在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)都建议只将所有必要的数据加载到笔记本中。

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

谢谢你的帮助!


当前回答

有很多方法来读取你的colab笔记本(**.ipnb)中的文件,其中一些是:

在运行时的虚拟机中安装谷歌驱动器。这里&,这里 使用google.colab.files.upload()。最简单的解决方案 使用本地REST API; 使用诸如PyDrive之类的API包装器

方法一和方法二对我有用,其他的我就不知道了。如果有人可以,就像其他人在上面的帖子中尝试的那样,请写一个优雅的答案。提前谢谢你!

第一种方法:

我无法挂载我的谷歌驱动器,所以我安装了这些库

# Install a Drive FUSE wrapper.
# https://github.com/astrada/google-drive-ocamlfuse

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass

!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

安装和授权过程完成后,首先挂载您的驱动器。

!mkdir -p drive
!google-drive-ocamlfuse drive

安装后,我能够挂载谷歌驱动器,您的谷歌驱动器中的所有内容都从/content/驱动器开始

!ls /content/drive/ML/../../../../path_to_your_folder/

现在您可以使用上面的路径简单地将文件从path_to_your_folder文件夹读入pandas。

import pandas as pd
df = pd.read_json('drive/ML/../../../../path_to_your_folder/file.json')
df.head(5)

你假设你使用你收到的绝对路径,而不是使用/../..

第二种方法:

这很方便,如果你想要读取的文件在当前工作目录中。

如果你需要从本地文件系统上传任何文件,你可以使用下面的代码,否则就避免它。

from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(
      name=fn, length=len(uploaded[fn])))

假设你在谷歌驱动器中有以下文件夹层次结构:

/content/drive/ML/../../../../path_to_your_folder/

然后,您只需将下面的代码加载到pandas中。

import pandas as pd
import io
df = pd.read_json(io.StringIO(uploaded['file.json'].decode('utf-8')))
df

其他回答

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

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

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

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

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

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

这是一个笔记本的例子

可以考虑只下载带有永久链接和预先安装的gdown的文件

不能在colab上永久存储文件。虽然你可以从你的驱动器导入文件,每次当你完成了文件,你可以把它保存回来。

将谷歌驱动器挂载到Colab会话

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

您可以像写入本地文件系统一样简单地写入谷歌驱动器 现在如果你看到你的谷歌驱动器将加载在文件选项卡。现在您可以从您的colab访问任何文件,您可以写入以及读取它。这些更改将在您的驱动器上实时完成,任何拥有您文件访问链接的人都可以从您的colab查看您所做的更改。

例子

with open('/content/gdrive/My Drive/filename.txt', 'w') as f:
   f.write('values')

我很懒,我的记忆力很差,所以我决定创建一个更容易记忆和输入的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/’

我所做的是:

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

Then

%cd /content/drive/My Drive/Colab Notebooks/

之后我就可以读取csv文件了

df = pd.read_csv("data_example.csv")

如果文件的位置不同,只需在“我的驱动器”后添加正确的路径