在 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 Drive 中的相对路径