如何在Python shell中知道/更改当前目录?

265

我正在使用Windows 7上的Python 3.2。当我打开Python shell时,如何知道当前目录是什么?我该如何将其更改为另一个目录(我的模块所在的目录)?


这个已经在这里讨论过了。 - mudda
5
@astay13 -- 我认为Ignacio的意思是你不需要切换目录到你的模块路径。你可能应该查看PYTHONPATH环境变量。 - simon
1
经典的 XY 问题 - Maarten Derickx
@mudda 另一个问题只是关于更改目录。这个问题已经成为了如何知道它的规范。 - Karl Knechtel
7个回答

363
你可以使用os模块。
>>> import os
>>> os.getcwd()
'/home/user'
>>> os.chdir("/tmp/")
>>> os.getcwd()
'/tmp'

但如果是要找到其他模块:你可以设置一个名为 PYTHONPATH 的环境变量,在 Linux 下会像这样:

export PYTHONPATH=/path/to/my/library:$PYTHONPATH

然后,解释器还会在此处搜索被import的模块。我猜在Windows下名称应该是相同的,但不知道如何更改。

编辑

在Windows下:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

(来自 http://docs.python.org/using/windows.html

编辑 2

......更好的方法是使用virtualenvvirtualenv_wrapper。这将允许您创建一个开发环境,在该环境中,您可以随意添加模块路径(使用add2virtualenv),而不会污染您的安装或“正常”工作环境。

http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html


我需要在Windows命令行或Python shell中设置PYTHONPATH吗? - astay13
astay13: 你必须在命令行中设置它,但我猜测有一个图形化菜单可以使其持久化(否则你每次重启或者像我这样每次登录都需要重新设置)。 @simon ;) - wal-o-mat
@astay13:在Windows上,您可以将其设置为全局环境变量。我现在没有Windows系统进行检查,但我认为您可以在“控制面板->系统”下找到它--它应该在那里 :) - simon
2
@astry13:你也可以选择忽略环境变量,而是在你的脚本中将路径添加到sys.path - Steven Rumbalski
3
如果您安装了多个Python(或者安装的程序打包了Python,换言之,您永远不会知道),请不要全局设置PYTHONPATH,否则可能会以神秘的方式破坏您的安装。参考链接:http://stackoverflow.com/q/23130614/4279 - jfs

22

你想要什么

import os
os.getcwd()
os.chdir('..')

1
os.chdir('C:\Users\Ajeya\Documents') ^ 语法错误:扫描字符串文字时遇到EOL - AAI
2
@Whatever,如果您在常规(非原始)Python字符串中使用反斜杠,则需要将其加倍。 Python还允许您使用正斜杠。 因此,可以使用以下任一方式:os.chdir('C:/Users/Ajeya/Documents'),或 os.chdir('C:\\Users\\Ajeya\\Documents'),或 os.chdir(r'C:\Users\Ajeya\Documents') - Charles Duffy
值得注意的是,您只在调试目的下调用 os.getcwd() 以便在更改工作目录之前我们可以看到当前的工作目录。实际更改 cwd 的代码只是 os.chdir('..') - Toothpick Anemone

17
>>> import os
>>> os.system('cd c:\mydir')
事实上,os.system() 可以执行任何 Windows 命令提示符可以执行的命令,而不仅限于更改目录。

1
文件“<stdin>”,第1行 os.system('cd c:\Users\Ajeya\Documents') ^ 语法错误:扫描字符串文字时出现EOL - AAI
@AAI 我真不知道这样会起作用。Windows使用反斜杠\表示目录,但在Python字符串中,就像几乎所有其他语言一样,反斜杠是转义字符,它会改变下一个字符的解释方式。在字符串末尾加上'将把最后一个引号解释为另一个字符,因此字符串不会被终止。而\m也应该会导致某种错误。在Windows中,您需要使用双反斜杠\来表示字面上的反斜杠字符。赞Windows。 - Manngo

13

使用 'os' 包是在 Python 中更改当前工作目录最简单的方法。以下是一个适用于 Windows 计算机的示例:

# Import the os package
import os

# Confirm the current working directory 
os.getcwd()

# Use '\\' while changing the directory 
os.chdir("C:\\user\\foldername")

使用“\”和关于Windows计算机的澄清。但我同意被接受的答案更具描述性。 - sambeet

6
改变当前目录不是处理在Python中查找模块的方式。
相反,请参阅模块搜索路径文档,了解Python如何找到要导入的模块。
以下是标准模块部分的相关内容:
sys.path变量是一个字符串列表,确定解释器查找模块的搜索路径。它从环境变量PYTHONPATH中获取默认路径,如果未设置PYTHONPATH,则使用内置默认值进行初始化。您可以使用标准列表操作修改它: >>> import sys >>> sys.path.append('/ufs/guido/lib/python')
回答您最初关于获取和设置当前目录的问题:
>>> help(os.getcwd)

getcwd(...)
    getcwd() -> path

    Return a string representing the current working directory.

>>> help(os.chdir)

chdir(...)
    chdir(path)

    Change the current working directory to the specified path.

这个答案非常有用。只需像这样添加您的项目目录:import sys sys.path.append('/home/g/PycharmProjects/your_project/') - gies0r

3

如果你 import os ,你可以使用 os.getcwd 来获取当前工作目录,你也可以使用 os.chdir 来改变你的目录。


2
你可以尝试这个:

最初的回答

import os

current_dir = os.path.dirname(os.path.abspath(__file__))   # Can also use os.getcwd()
print(current_dir)                                         # prints(say)- D:\abc\def\ghi\jkl\mno"
new_dir = os.chdir('..\\..\\..\\')                         
print(new_dir)                                             # prints "D:\abc\def\ghi"



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接