cd是用于更改工作目录的shell命令。
如何更改Python中的当前工作目录?
cd是用于更改工作目录的shell命令。
如何更改Python中的当前工作目录?
当前回答
import os
abs_path = 'C://a/b/c'
rel_path = './folder'
os.chdir(abs_path)
os.chdir(rel_path)
您可以将两者与os.chdir(abs_path)或os.chdir(rel_path)一起使用,不需要调用os.getcwd()来使用相对路径。
其他回答
正如其他人已经指出的那样,上述所有解决方案只会更改当前流程的工作目录。当您退出返回Unix shell时,这将丢失。如果你绝望了,你可以用这个可怕的黑客来改变Unix上的父shell目录:
def quote_against_shell_expansion(s):
import pipes
return pipes.quote(s)
def put_text_back_into_terminal_input_buffer(text):
# use of this means that it only works in an interactive session
# (and if the user types while it runs they could insert characters between the characters in 'text'!)
import fcntl, termios
for c in text:
fcntl.ioctl(1, termios.TIOCSTI, c)
def change_parent_process_directory(dest):
# the horror
put_text_back_into_terminal_input_buffer("cd "+quote_against_shell_expansion(dest)+"\n")
cd()使用生成器和装饰器很容易编写。
from contextlib import contextmanager
import os
@contextmanager
def cd(newdir):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
然后,即使抛出异常,目录也会恢复:
os.chdir('/home')
with cd('/tmp'):
# ...
raise Exception("There's no place like /home.")
# Directory is now back to '/home'.
如果您使用的是相对较新的Python版本,也可以使用上下文管理器,例如:
from __future__ import with_statement
from grizzled.os import working_directory
with working_directory(path_to_directory):
# code in here occurs within the directory
# code here is in the original directory
更新
如果你喜欢自己动手:
import os
from contextlib import contextmanager
@contextmanager
def working_directory(directory):
owd = os.getcwd()
try:
os.chdir(directory)
yield directory
finally:
os.chdir(owd)
您可以通过以下方式更改工作目录:
import os
os.chdir(path)
使用此方法时,需要遵循两个最佳实践:
捕获无效路径上的异常(WindowsError、OSError)。如果抛出异常,请不要执行任何递归操作,尤其是破坏性操作。他们将在旧的道路上运行,而不是在新的道路上。完成后返回到旧目录。这可以通过将chdir调用包装在上下文管理器中以异常安全的方式完成,就像BrianM.Hunt在回答中所做的那样。
在子流程中更改当前工作目录不会更改父流程中的当前工作目录。Python解释器也是如此。不能使用os.chdir()更改调用进程的CWD。
如果您使用spyder和love GUI,只需单击屏幕右上角的文件夹按钮,即可浏览您希望作为当前目录的文件夹/目录。完成此操作后,您可以转到spyder IDE中窗口的文件资源管理器选项卡,您可以看到那里存在的所有文件/文件夹。检查当前工作目录转到spyder IDE的控制台,只需键入
pwd
它将打印与您之前选择的路径相同的路径。