open()无法找到相对于PYTHONPATH的给定路径的文件

时间:2012-09-12 15:33:22

标签: python ubuntu path

我做了export PYTHONPATH=$PYTHONPATH:/home/User/folder/test。然后我在/home/User/时运行python并检查sys.path - 这是正确的。

>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg', 
'/home/User', '/home/User/folder/test','/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

然后我尝试打开文件/home/User/folder/test/pics/text/text.txt,如下所示:

>>>file = open('pics/text/text.txt','r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory:

如您所见,文件路径的前半部分位于$PYTHONPATH,后半部分作为open()函数的参数。为什么不起作用?我应该改变什么?

当我从/home/User/folder/test(导出路径)运行python并尝试打开文件时 - 它工作正常。

3 个答案:

答案 0 :(得分:5)

Open是相对于当前目录的,不使用PYTHONPATH。当前目录默认为在命令行上启动python时的任何内容。

您可以使用os.chdir

更改当前目录

答案 1 :(得分:2)

如果我正确地阅读了您的问题,您希望您的数据位于相对于模块的位置。如果是这种情况,您可以使用:

full_path = os.path.join(os.path.split(__file__)[:-1]+['pics','text','text.txt'])

__file__是模块的路径(包括modulename.py)。所以我拆分了这条路径,拉开了modulename.py[:-1])并通过os.path.join

添加了相对路径的其余部分

答案 2 :(得分:0)

每当我想要导入脚本时,相对于当前并且不使用包,我通常使用

sys.path = [os.path.dirname(__file__) + "/../another_dir"] + sys.path