小甲鱼零基础学习python_17 【文件操作的小实例】

今天来练习一个关于文件操作的实例:

如下:D盘里存储了一个hello.txt的文件,yhr和zwh共有三段对话,分别以若干’===’分隔,要求:
三段对话的yhr,zwh所说的话单独存储至新的文件:zwh存入boy1,boy2,boy3.txt,而yhr说的话存入girl1,girl2,girl3.txt里。
这里写图片描述

我的逻辑分析:

1. 首先这个txt文件每个人说的话占一行,如果转化为列表,每一行则是一个对象。但是上篇博客提到把文件对象转化为列表再处理的话,效率太低。文件对象可以每一行每一行的直接分开处理。

2. 于是现在问题分为两个:
A. 每一行单独处理,如何判定是yhr说的话还是zwh说的话呢?观察文档可以看到,无论是yhr还是zwh说的话,开头都有:’人名+:’ 作为组合,其后跟随个人所言。所以想到字符串的split()方法。字符串的基本函数可在我的博客中查找。可以对每一行字符串单独分割,分割后所说的话对应存入一个列表。
split(sep=None,maxsplit=-1)
不带参数默认是以空格为分隔符切片字符串,
如果maxsplit参数有设置,则仅分割maxsplit个字符串
返回切片后的子字符串拼接的结果
B. 怎么把每一段对话分开呢?可以看到这里每一段对话结束后都跟随一个’===’作为结束标志,如此,我们可以利用’===’作为每段分开标志。

由上,可以梳理出大体思路,利用for循环,单独读出一段文本中每一行文字,对美一行文字进行分割等处理。每一段对话结束后,可以执行文本write操作,写入文件。

首先写出分割对话,处理文件的大体函数:

def split_File(filename):
    f = open(filename, 'rt')

    boy = []   #用来存储每段对话里zwh所说的话
    girl = []    #用来存储每段对话里yhr所说的话
    f.seek(0, 0)  #将游标放置文本开头
    count = 1    #用于计数当前对话段数,便于存储对话文件的命名

    for eachline  in f:


        if eachline[:3]!='===':    #只要每行头三个字符不是‘===’

            (role,spoken)=eachline.split(':',1)    #这里进行字符串分割操作
            #单独对每行话进行切割  结果存入元组

            if role=='yhr':
                girl.append(spoken)   #对应列表新增说话内容
            else:
                boy.append(spoken)




        else:   #只要每行头三个字符是‘===’说明一段对话结束

            saveFile(count,boy,girl)   #保存文件

            boy=[]   #清空列表,为下一段对话做准备
            girl=[]
            count+=1    #计数+1
            #这里进行分别保存操作

    f.close()

然后就要构造下一个存储文件的函数: saveFile(count,boy,girl)

def saveFile(count,boy,girl):
    file_name_boy = 'D:\\boy' + str(count) + '.txt'
    file_name_girl = 'D:\\girl' + str(count) + '.txt'


    boy_file = open(file_name_boy, 'w')
    boy_file.writelines(boy)
    boy_file.close()

    girl_file = open(file_name_girl, 'w')
    girl_file.writelines(girl)
    girl_file.close()

最后调用split_File(‘D:\hello.txt’)即可

运行结果:
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值