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下一篇: How to successfully handle sftp:// protocol by subclassing NSURLProtocol?