将本地文件导入谷歌 colab

Posted

技术标签:

【中文标题】将本地文件导入谷歌 colab【英文标题】:import local file to google colab 【发布时间】:2018-08-31 06:15:31 【问题描述】:

我不明白 colab 如何处理目录,我创建了一个笔记本,然后 colab 将它放在 /Google Drive/Colab Notebooks 中。

现在我需要导入一个文件 (data.py),其中有一堆我需要的函数。直觉告诉我将文件放在同一个目录中并使用以下命令导入:

导入数据

但显然不是这样......

我也尝试将目录添加到路径集中,但我指定的目录不正确..

有人可以帮忙吗?

提前致谢!

【问题讨论】:

你可以将你的代码上传到github并在colab里面使用git clone 【参考方案1】:

Colab 笔记本存储在 Google 云端硬盘中。但它在另一个虚拟机上运行。因此,您也需要将 data.py 复制到那里。这样做是为了通过 Colab 上传 data.py。

from google.colab import files
files.upload()
# choose the file on your computer to upload it then
import data

【讨论】:

谢谢,效果很好...如果我在本地对 data.py 进行更改,如何在 colab 中更新它?我再次上​​传它但它没有更新......还有,有没有办法在colab中编辑.py文件? 您可能需要先用!rm data.py删除旧版本,然后重新上传。您可能还需要import importlibimportlib.reload(data) @Danf 您可以使用魔术函数%load filename.py 来获取代码单元格中的文件内容,并可以在那里进行编辑。 谢谢,我会试试...你认为这比使用 Drive FUSE 包装更好吗?我正在寻找设置环境的最有效方法... @Laura 您可以使用 zip/unzip 一次性管理 1000 个文件。替代方案是:pydrive、git clone 和 wget,如果你真的想要它自动的话。【参考方案2】:

将本地文件从系统上传到协作存储/目录。

from google.colab import files
def getLocalFiles():
    _files = files.upload()
    if len(_files) >0:
       for k,v in _files.items():
         open(k,'wb').write(v)
getLocalFiles()

【讨论】:

这行得通,但我发现如果您需要处理大量不断变化的文件,将 Google 驱动器与包装器链接起来会更好。当某些事情发生变化时,您需要做的就是重新启动内核。 你能把这个作为答案吗 是的,我只需要找到我的代码,因为已经有一段时间了,从那以后我停止使用 colab... 发布了我的答案和我使用的工具! 是的,看到这个方法也不错。但我的回答也不能被拒绝,因为同一解决方案有不同的方法。【参考方案3】:

所以,这就是我最终解决这个问题的方法。但是我必须指出,在我的情况下,我必须处理几个一直在变化的文件和专有模块。

我发现的最佳解决方案是使用 FUSE 包装器将 colab “链接”到我的 Google 帐户。我使用了这个特殊的工具:

https://github.com/astrada/google-drive-ocamlfuse

这里有一个如何设置环境的示例,但我是这样做的:

# Install a Drive FUSE wrapper.
!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


# Generate auth tokens for Colab
from google.colab import auth
auth.authenticate_user()
# Generate creds for the Drive FUSE library.
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

此时您已经安装了包装器,上面的代码将生成几个链接,供您授权访问您的 Google Drive 帐户。

你必须在 colab 文件系统中创建一个文件夹(记住这不是持久的,据我所知......)并在那里安装你的驱动器:

# Create a directory and mount Google Drive using that directory.
!mkdir -p drive
!google-drive-ocamlfuse drive

print ('Files in Drive:')
!ls drive/

!ls 命令将打印目录内容,以便您检查它是否有效,仅此而已。您现在拥有所需的所有文件,并且可以对它们进行更改而不会产生任何麻烦。请记住,您可能需要重新启动内核才能更新导入和变量。

希望这对某人有用!

【讨论】:

【参考方案4】:

要轻松上传本地文件,您可以使用新的 Google Colab 功能:

点击屏幕左侧的向右箭头(在 Google Colab 徽标) 选择“文件”选项卡 点击上传按钮

它将打开一个弹出窗口以选择要从本地文件系统上传的文件。

【讨论】:

它工作正常,但每次我们想要运行代码时,我们都应该重新上传它。有没有更简单的方法来访问这些文件?【参考方案5】:

现在 google 正式为轻松访问和使用 Gdrive 提供支持。

您可以使用以下代码将驱动器安装到 Colab:

from google.colab import drive
drive.mount('/gdrive')
%cd /gdrive/My\ Drive/location you want to move

【讨论】:

我猜应该是!cd /gdrive/My\ Drive/location you want to move 而不是%cd /gdrive/My\ Drive/location you want to move 如果您在 python 代码和 shell 脚本中使用相同的单元格,那么对 shell 命令使用 %。否则,你会得到一个错误。 ! 仅在代码单元中有 shell 脚本时有效。【参考方案6】:

您可以在colab中编写以下命令来挂载驱动器

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

你可以像这样通过简单的 linux 命令 wget 从一些外部 url 下载到驱动器中

!wget 'https://dataverse.harvard.edu/dataset'

【讨论】:

以上是关于将本地文件导入谷歌 colab的主要内容,如果未能解决你的问题,请参考以下文章

在Google Colab中导入一个本地模块或.py文件

将 .py 文件的整个文件夹导入 google colab

如何将图像从谷歌驱动器导入谷歌 colab

将文件从已安装的 Google Drive 复制到本地 Google Colab 会话

TensorBoard Colab UnimplementedError 文件系统方案“[本地]”未实现

将数据从 google colab 导出到本地计算机