Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 我的主Python应用程序如何在读取子包中文件的子包中运行脚本_Python 3.x - Fatal编程技术网

Python 3.x 我的主Python应用程序如何在读取子包中文件的子包中运行脚本

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”、“

我试图允许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”、“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,谢谢您提供的信息。幸运的是,打开文件的代码只是一个占位符,我实际上在那里做了一些其他的事情,但是在引用文件时遇到了问题。