如何从具有相对路径的包中的模块内部打开文件?

GT 77

我正在尝试让包中的模块在其目录中打开一个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())

或者,您可以使用ossys这样检索包路径

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C ++中打开具有相对路径的文件?

如何在C ++中检查具有相对路径的文件的存在

模块内部的相对路径

如何使用 Qt 程序中的默认应用程序打开具有相对路径的 pdf

用相对路径打开文件

如何从另一个目录导入具有相对路径的 Python 模块?

查找和复制具有相对路径的文件

具有相对路径的 AWS Lambda 访问文件

如何从 snap 包中解析相对路径?

python中模块的相对路径

如何包含具有相对路径的任务?

在Python中,如何从具有相对路径的祖父母文件夹中导入?

如何在open()中使用相对路径在python中打开文件?

在Java 7中,列出具有“相对路径”的文件

在Windows中复制具有完整相对路径的文件

如何访问带有相对路径的txt文件?

Python:从子目录导入模块,该模块加载具有相对路径的非Python文件

如何从相对路径的MediaStore中读取文件?

如何在HTML中嵌入或显示具有绝对/相对路径的pdf文档

如何定义文件的相对路径?

找到具有相对路径但不是绝对路径的文件?(VBS)

标记文件中的相对路径

HTML文件中的相对路径

如何在带有参数的git别名中获取文件的相对路径?

角构建无法找到具有相对路径的模块(在Azure开发运营上)

如何在CMake生成的解决方案中使用相对路径打开源代码中的文件

如何通过文件到模块的相对路径读取文件?

如何使用LINUX命令行列出具有绝对和相对路径的类列表文件?

使用IntelliJ IDEA在Java中引用具有相对路径的文本文件