在Google colab中更改目录(突破了python解释器)


73

因此,我尝试使用Google collab将git clone和cd混入该目录-但我无法将其CD入。我究竟做错了什么?

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

!cd开关频率分析

!ls datalab / SwitchFrequencyAnalysis /

您可能希望它输出SwitchFrequencyAnalysis的目录内容-而是输出其根目录。我感觉自己缺少明显的东西-与python解释器有关吗?(文档在哪里?)

演示在这里。


3
鲍勃·史密斯(Bob Smith)的答案是正确的做法,但是如果您好奇上面的方法为什么行不通:问题是,每个!-prefixed命令都在其自己的子Shell中运行-因此!cd启动了一个新的Shell,切换目录,然后杀死该外壳程序。在!ls随后重新开始在当前目录中。这样做!cd SwitchFrequencyAnalysis && ls是可行的,但是os.chdir在这里使用python是更干净的方法。
Craig Citro

Answers:


106

采用

%cd SwitchFrequencyAnalysis

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

您可以使用以下pwd命令确认它是否起作用:

!pwd

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


为什么cd使用%而pwd使用!作为其前缀
云彩计算

48

正如其他人指出的那样,该cd命令必须以百分比符号开头:

%cd SwitchFrequencyAnalysis

%和之间的区别!

Google Colab似乎从Jupyter继承了这些语法(后者从IPython继承了它们)。Jake VanderPlas在这里解释了这种IPython行为。您可以在下面查看摘录。

如果您使用IPython的shell命令一段时间,您可能会注意到您不能使用!cd该文件系统进行导航:

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

In [12]: !cd ..

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

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

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

另一种看待这种情况的方式:您需要这样做,%因为更改目录与​​当前笔记本的环境有关,而不与整个服务器运行时有关。

通常,!如果命令可以在单独的shell中运行,则使用该命令。%如果命令需要在特定笔记本电脑上运行,则使用此命令。


40

使用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最终看到的/root/.kaggle都是使用命令集!pip install -U -q kaggle后跟创建的,因此!mkdir -p ~/.kaggle,这意味着~/主目录等于/root/content,它们是
Anu

28

如果要使用cd或ls函数,则在函数名称(分别为%和!)使用%cd和!ls导航之前,需要正确的标识符

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

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

%cd ../      

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


3
您能否指向我可以找到上述用法的来源?另外,我正在寻找|在bash shell脚本中使用的流水线运算符,对此有何建议?另外,使用%!
Anu

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.