Python 3.x 我的主Python应用程序如何在读取子包中文件的子包中运行脚本
我试图允许foo.py使用相对导入加载file.txt,但遇到了FileNotFound错误Python 3.x 我的主Python应用程序如何在读取子包中文件的子包中运行脚本,python-3.x,Python 3.x,我试图允许foo.py使用相对导入加载file.txt,但遇到了FileNotFound错误 -- main.py | --- submodule | |-- __init__.py |-- foo.py |-- file.txt main.py 导入操作系统 导入导入库 module=importlib.import_模块('.foo',package='submodule')) 福比 file=open(“file.txt”、“
-- main.py
|
--- submodule
|
|-- __init__.py
|-- foo.py
|-- file.txt
main.py
导入操作系统
导入导入库
module=importlib.import_模块('.foo',package='submodule'))
福比
file=open(“file.txt”、“a”)
我希望foo.py能够读取,因为file.txt位于同一子目录中。我知道我可以将绝对路径放在foo.py中,但我想知道如何使用foo.py中的相对路径来加载file.txt。您可以通过在
foo.py
文件中创建current\u dir
变量来实现这一点,然后您可以使用该变量来获取file.txt
foo.py
的外观示例:
导入操作系统
current_dir=os.path.dirname(os.path.realpath(uu文件_uu))
def read_文件():
x=os.path.join(当前目录'file.txt')
以开放式(x,'rb')作为f:
返回f.read()
它的工作原理是,第一部分os.path.realpath(\uu file\uu)
获取项目中的foo.py
文件位置,第二部分os.path.dirname
获取该foo.py
存在的目录名。因此,通过这种方式,您可以在foo.py
中构建file.txt
的文件路径,以便main.py
可以执行foo.py
以获取file.txt
和main.py
:
从子模块导入foo
打印(foo.read\u文件())
如果提到“当前工作目录”的概念();-)会是一个更好的答案感谢您对此的评论:)simkus已经提供了技术答案。既然我注意到您打开了要追加的文件,我想指出,源代码树中的文件应该被视为只读的(只有开发人员应该编辑它们,然后将它们的更改提交给版本控制系统)。如果您的代码需要写入文件,它应该使用源目录树之外的目录(用户主页、某些系统或设置定义的目标等)。或者,如果是出于日志目的,请使用日志记录
包…Hi@brunodesshuilliers,谢谢您提供的信息。幸运的是,打开文件的代码只是一个占位符,我实际上在那里做了一些其他的事情,但是在引用文件时遇到了问题。