如何使用 sys.path.append 导入 python 中的文件?
How to import files in python using sys.path.append?
我的桌面上有两个目录,DIR1
和 DIR2
,其中包含以下文件:
DIR1:
file1.py
DIR2:
file2.py myfile.txt
文件包含以下内容:
file1.py
import sys
sys.path.append('.')
sys.path.append('../DIR2')
import file2
file2.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.py
与 myfile.txt
在同一目录时会发生这种情况,但它会抛出错误?谢谢你。
您可以使用模块的 __file__
属性创建相对于模块的路径。例如:
myfile = open(os.path.join(
os.path.dirname(__file__),
MY_FILE))
无论您从何处开始编写脚本,这都可以满足您的需求。
替换
MY_FILE = "myfile.txt"
myfile = open(MY_FILE)
和
MY_FILE = os.path.join("DIR2", "myfile.txt")
myfile = open(MY_FILE)
这就是您的问题所指的相对路径解决方案的评论。这假设你是 运行 从 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)
我的桌面上有两个目录,DIR1
和 DIR2
,其中包含以下文件:
DIR1:
file1.py
DIR2:
file2.py myfile.txt
文件包含以下内容:
file1.py
import sys
sys.path.append('.')
sys.path.append('../DIR2')
import file2
file2.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.py
与 myfile.txt
在同一目录时会发生这种情况,但它会抛出错误?谢谢你。
您可以使用模块的 __file__
属性创建相对于模块的路径。例如:
myfile = open(os.path.join(
os.path.dirname(__file__),
MY_FILE))
无论您从何处开始编写脚本,这都可以满足您的需求。
替换
MY_FILE = "myfile.txt"
myfile = open(MY_FILE)
和
MY_FILE = os.path.join("DIR2", "myfile.txt")
myfile = open(MY_FILE)
这就是您的问题所指的相对路径解决方案的评论。这假设你是 运行 从 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)