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

系统 1742 0

【一个任务】
这节课我们来完成一个任务:
将文件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: 文件中不同的对话间已经使用"========"分割了
文件如下:

python学习037-----python之文件(二):文件的分割与保存_第1张图片

            
              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('文件分割完毕!')
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论