Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
open()找不到相对于PYTHONPATH的给定路径的文件_Python_Ubuntu_Path - Fatal编程技术网

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

open()找不到相对于PYTHONPATH的给定路径的文件,python,ubuntu,path,Python,Ubuntu,Path,我确实导出了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',

我确实导出了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并尝试打开文件时,它成功了。

open相对于当前目录,不使用PYTHONPATH。当前目录默认为在命令行上启动python时的目录


您可以使用

Open更改当前目录,它相对于当前目录,并且不使用PYTHONPATH。当前目录默认为在命令行上启动python时的目录


如果我正确地阅读了您的问题,您可以使用

更改当前目录,您希望数据驻留在相对于模块的位置。如果是这种情况,您可以使用:

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

__文件是模块的路径,包括modulename.py。因此,我拆分了该路径,提取modulename.py[:-1],并通过os.path.join添加相对路径的其余部分。如果我正确地阅读了您的问题,您希望数据驻留在相对于模块的位置。如果是这种情况,您可以使用:

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

__文件是模块的路径,包括modulename.py。因此,我拆分了该路径,提取modulename.py[:-1],并通过os.path.join添加相对路径的其余部分。每当我想要导入脚本时,相对于当前和不使用包,我通常使用

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

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

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

这不是蟒蛇所做的;它只影响导入语句。所以我如何在没有完整文件路径的情况下打开文件?这不是PYTHONPATH所做的;它只影响导入语句。那么如何在没有完整文件路径的情况下打开文件呢?我会使用os.curdir和os.pardir来代替“.”和“..”和os.path.join,而不是/。为什么不只使用sys.path.append?mgilson:对不起,只使用+/../;不,不一样:您通常需要的是从相对于脚本位置的位置导入文件,而不是从运行脚本的目录导入文件。因此,os.path.dirnamefile为您提供了脚本所在的目录,os.curdir为您提供了目录,您可以从:dinas:not sys.path.append运行它,以确保python首先在我的位置查找模块,然后在所有其他原因中,如果某个库包含具有相同名称的模块,或者它的旧版本是在系统范围内安装的,你会痛苦地自责:我会用os.curdir和os.pardir来代替“.”和“..”和os.path.join,而不是/。为什么不只是sys.path.append?mgilson:对不起,只是+/../;不,不一样:您通常需要的是从相对于脚本位置的位置导入文件,而不是从运行脚本的目录导入文件。因此,os.path.dirnamefile为您提供了脚本所在的目录,os.curdir为您提供了目录,您可以从:dinas:not sys.path.append运行它,以确保python首先在我的位置查找模块,然后在所有其他原因中,如果某个库包含具有相同名称的模块,或者它的旧版本安装在全系统范围内,你会痛彻心扉: