创建Python子模块

创建Python子模块,python,module,Python,Module,我想创建一个名为unifile的工具,用于保存和打开文件 像这样unifile.open.yaml(“file.yaml”) 这是我的结构 unifile | ├-open | └--__init__.py | └-save └--__init__.py 调用我的模块的代码: 导入统一文件 a=unifile.open.yaml(“file.yaml”) open/\uuuu init\uuuuu.py import yaml class open(): def y

我想创建一个名为
unifile
的工具,用于保存和打开文件 像这样
unifile.open.yaml(“file.yaml”)

这是我的结构

unifile
|
├-open
|    └--__init__.py
|
└-save
     └--__init__.py

调用我的模块的代码:

导入统一文件
a=unifile.open.yaml(“file.yaml”)
open/\uuuu init\uuuuu.py

import yaml
class open():
    def yml(self, file_path):
        try:
            with open(file_path, "r", encoding="utf-8") as yaml_conf:
                yaml_file = yaml.safe_load(yaml_conf)

            return yaml_file
        except OSError:
            print("Can't load yaml")
如果我导入
unifile
总是说:

模块unifile未打开心房肌

2
\uuuu init\uuuuu.py中出现错误
我无法打开文件

[pylint]上下文管理器“打开”未实现进入和退出。[不是上下文管理器]


两个问题,两个问题

首先,您应该在unifile中添加一个init文件,用这个python可以理解unifile是一个带有子包的包

其次,open是一个内置函数,您可以通过调用类open来覆盖它。更改您的类名,它应该可以工作

  • 出现此错误的原因是unifile不是包,与open and save相同的顶层没有init.py文件。您也不能直接调用open.yml,因为open是包open中的一个类,所以您必须从open导入open,创建其实例,然后在该实例上调用iml

    从打开导入打开

    a=open().yml('file.yml'))

  • 出现此错误是因为您试图覆盖pythonopen中的现有关键字,这是您应该严格禁止的。因此,您应该为类设置除保留关键字以外的任何内容


  • 在这里为您的问题添加解决方案,使您的项目结构如下

    unifile/\uuuuu init\uuuuu.py
    文件添加到unifile本身而不是其他模块中

    然后
    unifile/open/_open.py
    文件内容

    import yaml
    
    class Open():
        def __init__(self):
            pass
        def yml(self, file_path):
            try:
                with open(file_path, "r", encoding="utf-8") as yaml_conf:
                    yaml_file = yaml.safe_load(yaml_conf)
    
                return yaml_file
            except OSError:
                print("Can't load yaml")
    
    unifile/\uuuu init\uuuu.py
    文件的内容

    from .open._open import Open 
    
    在终端中,像这样运行程序

    另外,最好先创建一个对象元素,然后再继续