我正在尝试让包中的模块在其目录中打开一个txt文件并读取其内容。
这是我的安排:
package
| __init__.py
| bar.py
| baz.py
| txt.txt
foo.py
这是内容 txt.txt
a()
这是内容 baz.py
def a():
with open("txt.txt") as file:
print(file.read())
这是内容 bar.py
from .baz import a
def b():
a()
print("b()")
这是内容 __init__.py
from .bar import b
def c():
b()
print("c()")
这是内容 foo.py
from package import c
c()
运行foo.py时,我希望得到
a()
b()
c()
但是我却得到了这个错误
Traceback (most recent call last):
File "foo.py", line 2, in <module>
c()
File "(...my full path...)\package\__init__.py", line 3, in c
b()
File "(...my full path...)\package\bar.py", line 3, in b
a()
File "(...my full path...)\package\baz.py", line 2, in a
with open("txt.txt") as file:
FileNotFoundError: [Errno 2] No such file or directory: 'txt.txt'
我将open
函数的参数更改为"txt.txt"
完整路径,并且可以使用,但这并不是真正有用的,因为我必须使用相对路径,而且我不知道发生了什么。
有什么建议?
在Python中,在这种情况下,路径是相对于调用脚本的foo.py
。
如果您想阅读txt.txt
通话内容foo.py
,则需要baz.py
像这样进行修改
def a():
with open("package/txt.txt") as file:
print(file.read())
import os
import sys
def a():
with open(os.path.join(os.path.dirname(sys.modules[__name__].__file__),"txt.txt")) as file:
print(file.read())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句