首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sys.path.append在python中导入文件?

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

Stack Overflow用户
提问于 2015-08-27 09:43:25
回答 2查看 128.9K关注 0票数 22

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

代码语言:javascript
复制
DIR1:
file1.py

DIR2:
file2.py  myfile.txt

这些文件包含以下内容:

file1.py

代码语言:javascript
复制
import sys

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

import file2

file2.py

代码语言:javascript
复制
import sys

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

MY_FILE = "myfile.txt"

myfile = open(MY_FILE) 

myfile.txt

代码语言:javascript
复制
some text

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

场景1

我通过cd进入DIR2并运行file2.py,它运行起来没有任何问题。

场景2

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

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-27 09:58:39

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

代码语言:javascript
复制
myfile = open(os.path.join(
    os.path.dirname(__file__),
    MY_FILE))

不管你从哪里开始你的脚本,这应该可以做你想做的事情。

票数 15
EN

Stack Overflow用户

发布于 2015-08-27 10:01:20

替换

代码语言:javascript
复制
MY_FILE = "myfile.txt"
myfile = open(MY_FILE) 

使用

代码语言:javascript
复制
MY_FILE = os.path.join("DIR2", "myfile.txt")
myfile = open(MY_FILE) 

这就是你的问题中提到的相对路径解决方案。这里假设你是从myfile.txt的目录开始运行的……所以不是很理想。

如果您知道my_file.txt将始终与file2.py位于相同的目录中,那么您可以在file2中尝试如下所示。

代码语言:javascript
复制
from os import path

fname =  path.abspath(path.join(path.dirname(__file__), "my_file.txt"))
myfile = open(fname)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32239372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档