import os


class ModeErrorException(Exception):
    def __init__(self, error_info):
        super().__init__(self)
        self.error_info = error_info

    def __str__(self):
        return self.error_info


class FileOpen:
    def __init__(self):
        pass

    @staticmethod
    def read_only(path, mode='r'):
        if mode not in ['r', 'r+', 'rb', 'rt', 'rb+', 'rt+']:
            raise ModeErrorException('the input mode is wrong')
        my_dir = os.path.dirname(path)  # 获得路径的目录
        if not os.path.exists(my_dir):  # 判断文件的所有父文件夹是否存在
            os.makedirs(my_dir)  # 创建所有父文件夹
        # 读文件需要判断文件是否存在,不存在则创建
        if not os.path.exists(path):
            open(path, mode)
        return open(path, mode)

    @staticmethod
    def write_able(path, mode='w'):
        if mode not in ['w', 'w+', 'wb', 'wt', 'wb+', 'wt+']:
            raise ModeErrorException('the input mode is wrong')
        my_dir = os.path.dirname(path)  # 获得路径的目录
        if not os.path.exists(my_dir):  # 判断文件的所有父文件夹是否存在
            os.makedirs(my_dir)  # 创建所有父文件夹
        return open(path, mode)


if __name__ == "__main__":
    wf = FileOpen.write_able(r"D:\Workspace\gitcode\EnglishPal\app\static\test.txt")
    wf.write("asdasdasd")
    wf.close()

    rf = FileOpen.read_only(r"D:\Workspace\gitcode\EnglishPal\app\static\test.txt")
    for line in rf.readlines():
        print(line)