python学习037-----python之文件(二):文件的分割与保存

【一个任务】
这节课我们来完成一个任务:
将文件record.txt中的数据进行分割,并按照以下规律保存起来:
1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")
2.客服的对话单独保存为girl_*.txt的文件(去掉"客服:")
3.文件中共有4段对话,分别保存为boy_1.txt, girl_1.txt, boy_2.txt, girl_2.txt,    boy_3.txt, girl_3.txt,
   boy_4.txt, girl_4.txt 共8个文件。
PS: 文件中不同的对话间已经使用"========"分割了
文件如下:

f = open( 'record.txt' )     #由于python文件和txt文件在同一个文件夹,所以不用加绝对路径
boy = []
girl = []    #初始化两个列表,一会用于存放文件信息
counter = 1  #初始化计数器

for each_line in f:
    if each_line[:6] != '======':  #这里只判断前六个符号,前六个不是等号就可以了,不用判断那么长
        #这里进行字符串分割操作
        (role, line_spoken) = each_line.split(':',1)     #注意:split()中的冒号要和文件中的一致,否则报错。
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '客服':
            girl.append(line_spoken)
    else:
        #这里进行文件的分别保存操作
        file_name_boy = 'boy_' + str(counter) + '.txt' 
        file_name_girl = 'girl_' + str(counter) + '.txt'
        
        boy_file = open( file_name_boy, 'w' )      #打开文件
        girl_file = open(file_name_girl, 'w')          #打开文件

        #前面已经将小甲鱼和客服的对话保存在了boy和girl这两个序列中
        boy_file.writelines( boy )           #写入文件(由前面的知识知道,将序列写入文件需要使用writelines()这个内置方法)
        girl_file.writelines( girl )             #写入文件

        boy_file.close()          #文件写入完后一定要记得关闭
        girl_file.close()           #如果不关闭文件,那么写入的内容会一直保存在缓冲区里,不会写入到文件中

        boy =[]                      #别忘了对这两个序列进行初始化,以便下次写入
        girl = []                      #同上
        counter += 1            #计数器加1

f.close()     #使用完文件要记得关闭 !
print('文件分割完毕!')

上面的代码有一个小小的问题,即:文件的保存是在遇到"======"后进行的,故如果不在最后一段
加上"======"的话,最后一段文字是只被分割而未被保存的。所以要解决上面的问题,可以在文字
中的底部加上"======",或者在代码跳出for循环后加上保存文件的代码。但是如果在for循环结束
后加保存代码又会显得程序非常臃肿,所以我们应该使用函数来替代重复代码,这样程序才会更加
简洁。如下:

def function():
    #这里进行文件的分别保存操作
    file_name_boy = 'boy_' + str(counter) + '.txt' 
    file_name_girl = 'girl_' + str(counter) + '.txt'
        
    boy_file = open( file_name_boy, 'w' )      #打开文件
    girl_file = open(file_name_girl, 'w')          #打开文件

    #下面的主程序中已经将小甲鱼和客服的对话保存在了boy和girl这两个序列中
    boy_file.writelines( boy )           #写入文件(由前面的知识知道,将序列写入文件需要使用writelines()这个内置方法)
    girl_file.writelines( girl )             #写入文件

    boy_file.close()          #文件写入完后一定要记得关闭
    girl_file.close()           #如果不关闭文件,那么写入的内容会一直保存在缓冲区里,不会写入到文件中

#【程序入口在此处】
f = open( 'record.txt' )     #由于python文件和txt文件在同一个文件夹,所以不用加绝对路径   
boy = []   #初始化两个列表,一会用于存放文件信息
girl = []    
counter = 1  #初始化计数器,为了给文件名标注序号

for each_line in f:
    if each_line[:6] != '======':  #这里只判断前六个符号,前六个不是等号就可以了,不用判断那么长
        #这里进行字符串分割操作
        (role, line_spoken) = each_line.split(':',1)     #注意:split()中的冒号要和文件中的一致,否则报错。
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '客服':
            girl.append(line_spoken)
    else:
        function()                  #遇到"======"就保存文件
        boy =[]                      #别忘了对这两个序列进行初始化,以便下次写入
        girl = []                      #同上
        counter += 1            #计数器加1

function()  #保存分割出来的最后一段文件

f.close()     #使用完文件要记得关闭 !
print('文件分割完毕!')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值