如何使用sys.path.append在python中导入文件?

2024-05-20 09:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的桌面上有两个目录,DIR1DIR2,其中包含以下文件:

DIR1:
file1.py

DIR2:
file2.py  myfile.txt

这些文件包含以下内容:

文件1.py

import sys

sys.path.append('.')
sys.path.append('../DIR2')

import file2

文件2.py

import sys

sys.path.append( '.' )
sys.path.append( '../DIR2' )

MY_FILE = "myfile.txt"

myfile = open(MY_FILE) 

myfile.txt文件

some text

现在,有两种情况。第一个有效,第二个错误。

情景1

cd进入DIR2并运行file2.py,它运行没有问题。

情景2

cd进入DIR1并运行file1.py,它抛出一个错误:

Traceback (most recent call last):
  File "<absolute-path>/DIR1/file1.py", line 6, in <module>
    import file2
  File "../DIR2/file2.py", line 9, in <module>
    myfile = open(MY_FILE)
IOError: [Errno 2] No such file or directory: 'myfile.txt'

但是,这对我来说毫无意义,因为我已经使用命令sys.path.append('../DIR2')将路径附加到file1.py

为什么当file1.py,当file2.pymyfile.txt在同一个目录中却抛出错误时会发生这种情况?谢谢您。


Tags: 文件pathpyimporttxtmy错误sys
2条回答

替换

MY_FILE = "myfile.txt"
myfile = open(MY_FILE) 

MY_FILE = os.path.join("DIR2", "myfile.txt")
myfile = open(MY_FILE) 

这就是你的问题所指的相对路径解决方案。这假设您是从dir one到myfile.txt运行它。。。所以不太理想。

如果您知道my_file.txt总是与file2.py在同一个目录中,那么您可以在file2中尝试类似的操作。。

from os import path

fname =  path.abspath(path.join(path.dirname(__file__), "my_file.txt"))
myfile = open(fname)

可以使用模块的__file__属性创建相对于模块的路径。例如:

myfile = open(os.path.join(
    os.path.dirname(__file__),
    MY_FILE))

不管脚本从哪里开始,这都应该符合您的要求。

相关问题 更多 >