2014-02-21 194 views
1

如何将我的python文件“myproject.py”的当前路径设置为文件本身? 我不希望这样的事情:如何在Python中自动设置当前工作目录

path = "the path of myproject.py" 

Mathematica中我可以设置:

SetDirectory[NotebookDirectory[]] 

与Mathematica中的代码的好处是,如果我改变我的数学文件的路径,例如如果我把它交给其他人或我把它放在另一个文件夹中,我不需要做任何额外的事情。每次Mathematica自动将目录设置为当前文件夹。

我想在Python中有类似的东西。

+0

你究竟在做什么,为什么?是否需要导入myproject.py或从命令行运行? – msvalkon

+0

'os.chdir('/ path')'或'os.getcwd()'? – Torxed

+0

在myproject.py我必须导入一些txt文件并绘制它们。 os.getcwd()给出了python使用的目录。我想将python文件所在的目录设置为工作目录。 – MOON

回答

3

正确的解决方案是不是要改变当前工作目录,但要获取包含脚本或模块的目录的完整路径,请使用os.path.join来构建文件路径:

import os 
ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) 

# then: 
myfile_path = os.path.join(ROOT_PATH, "myfile.txt") 

这比当前工作目录搞乱安全(提示:如果另一个模块,你做了之后改变当前的工作目录,但您可以访问您的文件之前,会发生什么?)

+1

@yashar:注意:如果使用'execfile('/ path/to/myproject.py')执行Python文件''__file__'会失败。 ['基于检测的解决方案](http://stackoverflow.com/a/21935564/4279)继续工作。 – jfs

+0

@ J.F.Sebastian:感谢您指出这一点 - 我很少使用'execfile',所以从未遇到过这个问题。 –

1

使用从内置的os模块os.getcwd()功能也有os.getcwdu()返回当前工作目录的一个Unicode对象

用法示例:

import os 
path = os.getcwd() 
print path 
#C:\Users\KDawG\Desktop\Python 
+1

问题问如何*设置*没有得到。 –

+0

@JanneKarila我对你说的话很困惑,但这显然是OP的需求,请阅读文档 –

+0

在myproject.py中,我必须导入一些txt文件并绘制它们。 os.getcwd()给出了python使用的目录。我想将python文件所在的目录设置为工作目录。 - yashar – MOON

1

我想设置的目录其中蟒蛇文件,如工作目录

有两个步骤:

  1. 找出路径Python文件
  2. 设置它的父目录作为工作目录

的第二个很简单:

import os 
os.chdir(module_dir) # set working directory 

如果你想支持运行的脚本一般情况下(Python文件的第一个可能是复杂直接导入到另一个模块的python文件,符号链接的python文件等)。这里有一个possible solution

import inspect 
import os 

module_path = inspect.getfile(inspect.currentframe()) 
module_dir = os.path.realpath(os.path.dirname(module_path)) 
相关问题