Python 如何从具有相对路径的包中的模块内部打开文件?
我试图让包中的模块打开其目录中的txt文件并读取其内容 这就是我的安排:Python 如何从具有相对路径的包中的模块内部打开文件?,python,python-3.x,Python,Python 3.x,我试图让包中的模块打开其目录中的txt文件并读取其内容 这就是我的安排: package | __init__.py | bar.py | baz.py | txt.txt foo.py 这是txt.txt a() 这是baz.py def a(): 打开(“txt.txt”)作为文件: 打印(file.read()) 这是bar.py的内容 从.baz导入a def b(): () 打印(“b()”) 这是\uuuu init\uuuuu.py 从.bar导入b def c(
package
| __init__.py
| bar.py
| baz.py
| txt.txt
foo.py
这是txt.txt
a()
这是baz.py
def a():
打开(“txt.txt”)作为文件:
打印(file.read())
这是bar.py的内容
从.baz导入a
def b():
()
打印(“b()”)
这是\uuuu init\uuuuu.py
从.bar导入b
def c():
b()
打印(“c()”)
这是foo.py
从包导入c
c()
运行foo.py时,我希望
a()
b()
c()
但是我却犯了这个错误
回溯(最近一次呼叫最后一次):
文件“foo.py”,第2行,在
c()
文件“(…我的完整路径…\package\\uuuuu init\uuuuu.py”,第3行,c语言
b()
文件“(…我的完整路径…\package\bar.py”,第3行,在b中
()
文件“(…我的完整路径…\package\baz.py”,第2行,在
打开(“txt.txt”)作为文件:
FileNotFoundError:[Errno 2]没有这样的文件或目录:“txt.txt”
我将open
函数“txt.txt”
的参数更改为完整路径,它起了作用,但这并不是很有用,因为我必须使用相对路径,我不知道发生了什么
有什么建议吗?在Python中,路径是相对于调用脚本的,在本例中是foo.py
如果您想从调用foo.py
读取txt.txt
,您需要像这样修改baz.py
def a():
打开(“package/txt.txt”)作为文件:
打印(file.read())
或者,您可以使用和类似的方法检索包路径
导入操作系统
导入系统
定义a():
将open(os.path.join(os.path.dirname(sys.modules[\uuuuuu name\uuuuuuu]。\uuuuuuu file\uuuuuuuu),“txt.txt”)作为文件打开:
打印(file.read())
您可以将PYTHONPATH
环境变量设置为指向您的包,也可以相对于运行foo.py
对于第一个选项,您可以执行以下操作:
PYTHONPATH=path/to/package python foo.py
对于第二个选项,首先将目录更改为package,然后从相对路径text.txt
不存在的位置运行foo.pyfoo.py
。如果从与package
目录相同的位置运行foo.py
,请使用package/text.txt
作为文件路径。记住:是什么决定了你的代码运行的路径,而不是运行的代码所在的位置。如果你对相对路径有疑问,请使用绝对路径。模块的\uu文件\uu
属性与pathlib
或os.path
中的函数结合使用可能会有所帮助。