导入的代码无法打开其目录中的文件

时间:2014-01-15 23:56:41

标签: python import

我有以下文件结构:

test/
    test1.py
test2.py
text.txt

以下是文件的内容

test1.py:

import sys
sys.path.append('../')
import test2

test2.read()

test2.py:

def read():
    with open('text.txt', 'rb') as f:
        print f.read()

if __name__ == "__main__":
    read()

text.txt包含一行文字。当我运行test1.py时,我收到“找不到文件”错误:

Traceback (most recent call last):
  File "test1.py", line 5, in <module>
    test2.read()
  File "../test2.py", line 2, in read
    with open('text.txt', 'rb') as f:
IOError: [Errno 2] No such file or directory: 'text.txt'

我有点理解为什么会出现这个错误。但是我该如何处理这些错误呢。我希望test2.py中的代码就像我可以在任何地方使用的库代码一样。

3 个答案:

答案 0 :(得分:5)

sys.path用于python路径(PYTHONPATH eviroment变量)。 即当import某个库时,在哪里查找python库。 在open()寻找文件的地方不会产生影响。

当你open(filename)时。 filename与程序working directory相关。 (代码运行的路径)

因此,如果您想访问其路径相对于代码文件路径的flie,则可以使用包含当前文件路径的内置变量__file__

因此您可以将test2.py更改为:

import os

def read():
    with open(os.path.join(os.path.dirname(__file__),'text.txt'), 'rb') as f:
        print f.read()

答案 1 :(得分:3)

正如你所要求的那样,正确使用pkg_resources here。基本上类似下面的内容将是你想要的test2.py:

import pkg_resources

def read():
    with pkg_resources.resource_stream(__name__, 'text.txt') as f:
        print f.read()

if __name__ == "__main__":
    read()

答案 2 :(得分:0)

不要使用相对路径。使用完整路径:

with open(r'C:\Somewhere\someplace\test.txt') as f: