在 Google colab 中更改目录(脱离 python 解释器)

Posted

技术标签:

【中文标题】在 Google colab 中更改目录(脱离 python 解释器)【英文标题】:Changing directory in Google colab (breaking out of the python interpreter) 【发布时间】:2018-06-26 03:49:12 【问题描述】:

所以我正在尝试使用 Google 协作将 git clone 和 cd 放入该目录 - 但我无法 cd 进入该目录。我做错了什么?

!rm -rf SwitchFrequencyAnalysis && git clone https://github.com/ACECentre/SwitchFrequencyAnalysis.git

!cd 开关频率分析

!ls datalab/ SwitchFrequencyAnalysis/

您可能希望它输出 SwitchFrequencyAnalysis 的目录内容 - 但它是根目录。我觉得我遗漏了一些明显的东西——这与在 python 解释器中有关吗? (文档在哪里??)

Demo here.

【问题讨论】:

Bob Smith 在下面的回答是正确的方法,但如果你好奇为什么上面的方法不起作用:问题是每个 !-prefixed 命令都在它的自己的子shell——所以!cd 启动一个新的shell,切换目录,然后杀死那个shell。 !ls 然后在当前目录中重新启动。执行!cd SwitchFrequencyAnalysis && ls 会有效,但使用python 的os.chdir 是更简洁的方法。 【参考方案1】:

使用os.chdir。这是一个完整的例子: https://colab.research.google.com/notebook#fileId=1CSPBdmY0TxU038aKscL8YJ3ELgCiGGju

简洁:

!mkdir abc
!echo "file" > abc/123.txt

import os
os.chdir('abc')

# Now the directory 'abc' is the current working directory.
# and will show 123.txt.
!ls

【讨论】:

太棒了!所以,/content/root 是否指向同一个文件夹位置。我的意思是我很难理解 googleColab 中的命令与底层 Linux-VM 文件系统的关系。由于您执行%cd /content | ls!ls -la | pwd,您最终会看到使用命令集!pip install -U -q kaggle 后跟!mkdir -p ~/.kaggle 创建的/root/.kaggle,这意味着主目录~/ 相当于/root &/content,是那些【参考方案2】:

使用

%cd SwitchFrequencyAnalysis

更改笔记本环境的当前工作目录(而不仅仅是运行您的 ! 命令的子shell)。

您可以像这样使用pwd 命令确认它是否有效:

!pwd

关于 jupyter / ipython 魔法的更多信息: http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-cd

【讨论】:

为什么 cd 使用 % 而 pwd 使用 !作为它的前缀【参考方案3】:

如果你想使用 cd 或 ls 函数,你需要在函数名之前有适当的标识符(分别为 % 和 !) 使用 %cd 和 !ls 导航

.

!ls    # to find the directory you're in ,
%cd ./samplefolder  #if you wanna go into a folder (say samplefolder)

或者如果你想退出当前文件夹

%cd ../      

然后相应地导航到所需的文件夹/文件

【讨论】:

能否请您指出我可以找到上述用法的来源?另外,我正在寻找使用管道运算符|,就像我们在 bash shell 脚本中使用的那样,在这方面有什么建议吗?另外,使用%!有什么区别【参考方案4】:

正如其他人指出的那样,cd 命令需要以百分号开头:

%cd SwitchFrequencyAnalysis

%! 之间的区别

Google Colab 似乎从 Jupyter 继承了这些语法(它从 IPython 继承了它们)。 Jake VanderPlas 解释了这种 IPython 行为here。你可以看下面的摘录。

如果你玩过 IPython 的 shell 命令一段时间,你可能会 请注意,您不能使用 !cd 导航文件系统:

In [11]: !pwd 
/home/jake/projects/myproject

In [12]: !cd ..

In [13]: !pwd 
/home/jake/projects/myproject 

原因是 笔记本中的 shell 命令在临时子 shell 中执行。 如果您想以更持久的方式更改工作目录, 你可以使用%cd魔术命令:

In [14]: %cd ..
/home/jake/projects

另一种看法:您需要%,因为更改目录与​​当前笔记本的环境有关,但与整个服务器运行时无关。

一般来说,如果命令可以在单独的 shell 中运行,请使用 !。如果需要在特定笔记本上运行命令,请使用 %

【讨论】:

您也可以只使用“cd”,而不使用 !cd 或 %cd。这是做什么的:)?谢谢!【参考方案5】:
!pwd
import os
os.chdir('/content/drive/My Drive/Colab Notebooks/Data')
!pwd

查看此答案以获取详细说明 https://***.com/a/61636734/11535267

【讨论】:

还要补充一点,你必须先在 Colab 中挂载 Google Drive 并授予 Google Drive File Stream 授权。 你救了我的命。【参考方案6】:

我认为您必须先安装 Google Drive,然后才能执行其他任何操作。

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

【讨论】:

以上是关于在 Google colab 中更改目录(脱离 python 解释器)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google colab 中更改 Keras/tensorflow 版本?

Google Colab 使用易错总结

Google colab 上的结果与本地结果不同

安装在 Google Colab 中的 Google Drive 中的相对路径

在 Python 中嵌入 Matplotlib 动画(google colab notebook)

在 google colab 中将 CUDNN 升级到 8.2