Python语言-文本读取

知识代码

# 文本数据操作演示

# 文件读代码演示
def read_data(path):
    # 文件打开
    f = open(path, encoding='utf-8')

    # 文件操作(读、写)
    for line in f:
        print(line)

    # 文件流关闭
    f.close()


# 文件写代码演示
def write_data(path, data):
    f = open(path,mode='w+',encoding='utf-8')
    f.write(data)
    f.close()


if __name__ == '__main__':
    path = '全唐诗.txt'
    read_data(path)

    target_path = 'poem.txt'
    data = '妙夺鲛绡色,光腾月扇辉。非君下路去,谁赏故人机。'
    write_data(target_path,data)


# 文件读代码演示
def read_data(path):
    # 文件打开
    with open(path, encoding='utf-8') as f:
        # 文件操作(读、写)
        for line in f:
            print(line)

# 文件写代码演示
def write_data(path, data):
    with open(path,mode='a+',encoding='utf-8') as f:
        f.write(data)



if __name__ == '__main__':
    path = '全唐诗.txt'
    # read_data(path)

    target_path = 'poem.txt'
    data = '妙夺鲛绡色,光腾月扇辉。非君下路去,谁赏故人机。'
    write_data(target_path,data)

案例实战

数据:
1、全唐诗.txt(唐诗文本)
2、dict.txt (场景字典,冒号分割,冒号左侧为场景,冒号右侧为场景关键字
如果没有冒号则场景和关键字是一个)

实战:
1、根据场景字典从全唐诗中进行筛选对应的一行诗
2、代码新建文件夹以“全唐诗场景_[年月日]”
3、将1步骤结果输出到2创建的文件夹中,并在此文件夹中创建不同子文件夹(以场景名命名),字场景文件夹中有不同的文件,以关键字命名

字典文件内容dict.txt

雨:雨,润物

花:梨花,牡丹
月:月,婵娟

 

class TangPoem():

    # 构造函数
    def __init__(self, path, dict_path):
        self.path = path
        self.dict_scene = {}
        self.dict_result = {}
        self.root_folder = ''
        self.create_root_folder()
        self.load_dict(dict_path)

    # 诗词分析
    def poem_analysis(self):
        with open(self.path, encoding='utf-8') as file:
            # 读取每一行数据
            for line in file.readlines():
                # 获取场景字典所有项进行遍历
                for scene, v in self.dict_scene.items():
                    # 根据拆分后的关键字判断是否存在
                    for keyword in v.split(','):
                        if keyword:
                            self.calc_scene(line, scene, keyword)
        # 输出结果
        self.save_txt_result()

    # 计算每一行的场景
    def calc_scene(self, line, scene, kw):
        # 判断关键字是否在当前行中
        if kw in line:
            value_dict = self.dict_result.get(scene)
            if value_dict:
                value = value_dict.get(kw)
                if value:
                    value.append(line)
                else:
                    value_dict[kw] = [line]
            else:
                self.dict_result[scene] = {kw: [line]}

    # 创建根场景文件夹
    def create_root_folder(self):
        date = datetime.datetime.now().strftime('%Y%m%d')
        target_folder = f'全唐诗场景_{date}'
        if os.path.exists(target_folder) == False:
            os.mkdir(target_folder)
        self.root_folder = target_folder

    # 创建场景文件夹
    def create_scene_folder(self, scene):
        scene_folder = os.getcwd() + os.sep + self.root_folder + os.sep + scene
        if os.path.exists(scene_folder) == False:
            os.mkdir(scene_folder)
        return scene_folder

    # 输出对应场景到不同文件夹中
    def save_txt_result(self):
        for scene, v in self.dict_result.items():
            scene_folder = self.create_scene_folder(scene)
            for poem_k, poem_sen in v.items():
                newpath = scene_folder + os.sep + poem_k + '.txt'
                with open(newpath, mode='w+', encoding='utf-8') as file:
                    for line in poem_sen:
                        file.write(line)

    # 获取场景字典
    def load_dict(self, dict_path):
        dict_scene = {}
        with open(dict_path, encoding='utf-8') as file:
            for line in file.readlines():
                lists = line.split(':')
                if len(lists) == 2:
                    dict_scene[lists[0]] = lists[1].strip('\n')
                else:
                    secne = lists[0].strip('\n')
                    dict_scene[secne] = secne
        self.dict_scene = dict_scene
        return dict_scene


if __name__ == '__main__':
    tang_poem = TangPoem('全唐诗.txt', 'dict.txt')
    tang_poem.poem_analysis()
    # dict_scene = tang_poem.load_dict('dict.txt')
    # print(dict_scene)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数智侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值