将本地文件导入谷歌 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 importlib
和importlib.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 Drive 复制到本地 Google Colab 会话