python-3.x - 我的主要 Python 应用程序如何在子包中运行脚本,该脚本读取子包中的文件
问题描述
我试图让 foo.py 使用相对导入加载 file.txt,但我遇到了 FileNotFoundError。
-- main.py
|
--- submodule
|
|-- __init__.py
|-- foo.py
|-- file.txt
主文件
import os
import importlib
module = importlib.import_module('.foo', package='submodule')
foo.py
file = open("file.txt","a")
我希望 foo.py 能够读取,因为 file.txt 位于同一子目录中。我知道我可以将绝对路径放在 foo.py 中,但我想知道如何使用 foo.py 中的相对路径来加载 file.txt。
解决方案
您可以通过current_dir
在文件中创建变量来执行此foo.py
操作,然后您可以使用该变量来获取file.txt
外观示例foo.py
:
import os
current_dir = os.path.dirname(os.path.realpath(__file__))
def read_file():
x = os.path.join(current_dir, 'file.txt')
with open(x, 'rb') as f:
return f.read()
它是如何工作的,第一部分为os.path.realpath(__file__)
您获取foo.py
项目中的文件位置,第二部分os.path.dirname
将获取该文件所在的目录名称foo.py
。因此,您可以通过这种方式将文件路径构建到file.txt
infoo.py
以便main.py
可以执行foo.py
以获取 a 的内容file.txt
并且main.py
:
from submodule import foo
print(foo.read_file())
推荐阅读
- kubernetes - Kubernetes Pod 上的 CockroachDB 集群崩溃
- reactjs - 为什么 this.setState 在我的点击功能中没有更新?
- c++ - 为什么这个按位运算是“从'int'到'byte'的缩小转换”?- 阿杜诺
- javascript - body:after 出现在每个打印页面上
- swift - 如何在 Realm 对象上建模 Swift 字典属性?
- linux - 无法在 cpanel (Linux) 上运行 Elasticsearch
- javascript - 是否有某种方法可以将变量(特别是映射)从服务器端导入客户端(Socket.io)?
- php - Android:尝试上传到服务器上的 php 文件时,以 byte64 编码位图会产生内存错误
- elasticsearch - 我需要安装什么才能在 Kibana 中使用日志功能?
- java - 如何在Java中将两张图片叠加在一起?