gpt4 book ai didi

python - 如何使用相对路径从包内的模块内部打开文件?

转载 作者:行者123 更新时间:2023-12-01 01:01:24 24 4
gpt4 key购买 nike

我试图让包内的模块打开其目录内的 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

如果您想通过调用 foo.py 读取 txt.txt,您需要像这样修改 baz.py

def a():
with open("package/txt.txt") as file:
print(file.read())

或者,您可以使用 os 检索包路径和 sys像这样

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())

关于python - 如何使用相对路径从包内的模块内部打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com