【问题标题】:CoLab Accessing FilesCoLab 访问文件
【发布时间】:2019-05-08 06:28:16
【问题描述】:

我可以在 CoLab 中运行 jupyter 笔记本真是太好了,但我正在疯狂地保存和加载文件。例如,我正在为我的课程写作业,并使用 HTML 标记在其中包含图形。 (我想使用 HTML 而不是降价图像,所以我可以设置宽度。)所以在文本单元格中我有

<img src="CoLab04.png" width="250">

当我在笔记本电脑上运行 jupyter notebook 时,这可以正常工作,但在 CoLab 中,它无法找到图像即使图像与 ipynb 文件位于同一 CoLab 文件夹中 .错了。

我在保存数据文件时遇到了类似的问题。在我的笔记本电脑上,我可以使用普通的 python 函数openwriteclose 等。该代码可以毫无问题地运行,但文件不会显示在 Google Drive 上。当我搜索所有 Google Drive 时,不在 CoLab 文件夹或任何其他文件夹中。呃。我阅读 TFM 并使用

from google.colab import drive, files
drive.mount('/content/gdrive')
fig.savefig("LED12.png") # saves a figure as a file
files.download("LED12.png")

这会将文件下载到我的笔记本电脑。然后我必须将文件上传到 Google Drive 文件夹,以便我的学生可以看到它。

我错过了什么吗?为什么使用 Google-CoLab jupyter notebook 创建和读取 Google Drive 文件如此困难?

我读过https://colab.research.google.com/notebooks/io.ipynb,但为什么这么难?我需要一些易于新手学生使用的东西。如果读写文件这么难,我将不得不建议我的学生在他们的笔记本电脑上安装 jupyter,而不是使用 CoLab。

【问题讨论】:

  • 我在将文件从 colab 保存到驱动器时​​遇到了同样的问题,我发现您只能将 txt 文件直接保存到已安装的驱动器。所以我使用 PyDrive 将我的文件直接从 colab 加载到驱动器。

标签: python jupyter-notebook google-colaboratory


【解决方案1】:

在我看来是sys.path 的问题。

通过以下代码挂载My Drive

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

那么您的主 Google Drive 就可以被读取了

!ls /content/drive/My Drive/

如果您希望集中您的 colab 项目的 My Drive 下有一个子文件夹,假设您的 Google Drive 主目录下有 projectA 文件夹。可以将projectA文件夹路径添加到sys.path

import sys
sys.path.append("/content/drive/My Drive/projectA")

然后您应该能够以与在本地计算机根路径中使用的相同方式保存无花果。该文件将保存到您运行 colab 代码的 projectA 文件夹中。

fig.savefig("LED12.png")

您应该能够看到该文件出现在那里。如果这不起作用,那么在做opensaveclose等路径敏感操作时尝试使用绝对路径:

working_path = '/content/drive/My Drive/projectA'
fig.savefig(os.path.join(working_path, "LED12.png"))

【讨论】:

  • 谢谢。每次我需要保存文件时都需要这样做吗?
  • 是的,对于每个会话,您都需要重新安装我的驱动器。
【解决方案2】:

几天前,我在 Colab 中完成了这项工作(阅读、训练我的模型并上传我训练过的模型)。让我们简单点。 请执行以下步骤。我正在尝试涵盖两者(读取 csv 以及上传文件)。

第 1 步: 转到您的 Google 云端硬盘并创建一个文件夹:Colab 并将您的文件保存在 Colab 文件夹中。

第 2 步:现在,在 Colab jupyter notebook 中安装 pydrive

!pip install pydrive

第 3 步:运行以下命令以访问 Google 驱动器文件

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

第 4 步: 挂载驱动器(在这里您将获得 Colab jupyter shell 中的链接。单击生成的链接并验证您的 google 驱动器(只需复制并粘贴生成的代码))

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

第 5 步: 验证并创建 PyDrive 客户端。在这里执行与第 4 步相同的操作(单击生成的链接并验证您的谷歌驱动器(只需复制并粘贴生成的代码))

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

第 6 步: 要获取文件,请将 id 替换为您要访问的文件的 id(您的文件 id)。对我来说,它是 csv 文件。要获取 ID,请转到共享并生成链接。你会发现类似:https://drive.google.com/file/d/xxxxxxxxxxxxxx/view?usp=sharing。把它(xxxxxxxxxxxxxx)放在下面,同样的,你想读多少个文件。

normal_1 = drive.CreateFile({'id':'13AR0sS1pndF0fTxmdjQRv_1Bv5aBNpkT'}) 
normal_1.GetContentFile('normal_1.csv')

normal_2 = drive.CreateFile({'id':'1Z0DO8M1Qco07kyVoxYSgxXBx6XYGBzJd'}) 
normal_2.GetContentFile('normal_2.csv')

abnormal = drive.CreateFile({'id':'12zFHDXVjreorRrHHhYrA1n82VQLuawsl'}) 
abnormal.GetContentFile('abnormal.csv')

第 7 步:现在,您可以读取这些文件并加载到数据框中以供进一步使用。

normal_1 = pd.read_csv('normal_1.csv', skiprows = np.arange(100, normal_1.shape[0])) 
normal_2 = pd.read_csv('normal_2.csv', skiprows = np.arange(100, normal_2.shape[0])) 
abnormal = pd.read_csv('abnormal.csv', skiprows = np.arange(50, abnormal.shape[0])) 

第 8 步:训练模型后将模型保存到磁盘:使用 joblib

from sklearn.externals import joblib
filename = 'model.sav'
joblib.dump(clf, filename)

# Upload model to you google drive
model_file = drive.CreateFile({'title' : 'model.sav'})
model_file.SetContentFile('model.sav')
model_file.Upload()

现在,转到我的驱动器并刷新它。你会发现一些“model.sav”。 jupyter notebook 文件中的完整代码可以访问我的github 链接。我希望它能帮助你解决你的问题。

【讨论】:

  • 这个答案让问题看起来更糟。我想让开始在 python/jupyter notebooks 中编程的学生轻松一些。
【解决方案3】:

从 GitHub 加载 notebook 可能更简单,其中同一存储库中的图像链接将更直观地加载。

例如,下面的笔记本会加载一组捆绑在其 GitHub 存储库中的图像。

https://colab.research.google.com/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/05.01-What-Is-Machine-Learning.ipynb

第一张图的markdown参考:

![](figures/05.01-classification-1.png)
[figure source in Appendix](06.00-Figure-Code.ipynb#Classification-Example-Figure-1)

这对应于此处的 GitHub 存储库: https://github.com/jakevdp/PythonDataScienceHandbook/

在此示例的基础上,捆绑数据文件的常见模式是在笔记本顶部添加 !git clone ... 命令,以便一次性引入整个 repo。

在 GitHub 中实现这一点比 Drive 更简单的原因是 GitHub 在存储库级别统一了 ACL,而 Drive 在文件级别管理 ACL。因此,公开共享一个引用了图像或其他未共享的云端硬盘文件的云端硬盘笔记本会有点麻烦。

【讨论】:

  • 这只是证实了对于一个新手的学生来说并不容易。
  • @profhuster 你有没有找到解决方案?我有同样的问题。我还研究了 kaggle,它只是稍微不那么复杂,但比我希望我的学生处理的还要难。
  • 没有。我让学生安装 python 并在他们自己的笔记本电脑上运行。
猜你喜欢
  • 2019-05-20
  • 2020-03-22
  • 2018-08-18
  • 2020-10-02
  • 2019-03-03
  • 2020-12-05
  • 1970-01-01
  • 2018-10-26
  • 2018-07-07
相关资源
最近更新 更多