首页 > 解决方案 > 我的主要 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。

标签: python-3.x

解决方案


您可以通过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.txtinfoo.py以便main.py可以执行foo.py以获取 a 的内容file.txt

并且main.py


from submodule import foo

print(foo.read_file())


推荐阅读