Python中的相对路径

我正在构建一个简单的助手脚本,用于将我们的代码库中的几个模板文件复制到当前目录。 但是,我不具有存储模板的目录的绝对路径。 我确实有一个来自脚本的相对路径,但是当我调用脚本时,它会将它视为相对于当前工作目录的路径。 有没有一种方法可以指定这个相对的URL来自脚本的位置呢?


在具有该脚本的文件中,您希望执行如下操作:

import os
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'relative/path/to/file/you/want')

这会给你找到你正在寻找的文件的绝对路径。 请注意,如果您使用的是setuptools,则应该使用其包资源API。

更新 :我在这里回复评论,所以我可以粘贴一个代码示例。 :-)

我正确地认为__file__并不总是可用的(例如,当您直接运行文件而不是导入文件时)?

当你提到直接运行文件时,我假设你的意思是__main__脚本。 如果是这样,我的系统似乎不是这样(OS X 10.5.7上的python 2.5.1):

#foo.py
import os
print os.getcwd()
print __file__

#in the interactive interpreter
>>> import foo
/Users/jason
foo.py

#and finally, at the shell:
~ % python foo.py
/Users/jason
foo.py

不过,我确实知道C扩展中有一些与__file__有关的怪癖。 例如,我可以在我的Mac上执行此操作:

>>> import collections #note that collections is a C extension in Python 2.5
>>> collections.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-
dynload/collections.so'

但是,这在我的Windows机器上引发了一个例外。


你需要os.path.realpath (下面的示例将父目录添加到你的路径中)

import sys,os
sys.path.append(os.path.realpath('..'))

正如接受的答案中提到的那样

import os
dir = os.path.dirname(__file__)
filename = os.path.join(dir, '/relative/path/to/file/you/want')

我只是想补充一点

后面的字符串不能以反斜杠开始,实际上没有字符串应该包含反斜杠

它应该是类似的

import os
dir = os.path.dirname(__file__)
filename = os.path.join(dir, 'relative','path','to','file','you','want')

在某些情况下,接受的答案可能会引起误解,请参阅此链接了解详情

链接地址: http://www.djcxy.com/p/34849.html

上一篇: Relative paths in Python

下一篇: How to successfully handle sftp:// protocol by subclassing NSURLProtocol?