小甲鱼Python3学习笔记之第二十九讲(仅记录学习)

第二十九讲:文件:一个任务

一、知识点:

0.任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:

  • 小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
  • 小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
  • 文件中总共有三段对话,分别保存为boy_1.txt,girl_1.txt,boy_2.txt,girl_2.txt,boy_3.txt,girl_3.txt共6个文件(提示:文件中的不同对话见已经使用“=========”分割)

代码一:

#打开record.txt文件
f = open('E:\\record.txt')  

#定义3个变量,并对它们初始化
boy = []     
girl = []
count = 1

#循环读取文件
for each_line in f:
  
  #如果当前内容不等于"======",则继续读取内容;否则读取,开始写操作
  if each_line[:6] != "======":            
    
    #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken
    (role,spoken) = each_line.split(':',1) 
    
    #如果对话角色为"小甲鱼",则将文件追加到boy列表中
    if role == '小甲鱼':                  
       boy.append(spoken)
       
    #如果对话角色为"小客服",则将文件追加到girl列表中
    if role == '小客服':                   
       girl.append(spoken)
  else:
     #定义输出文件名称
     file_name_boy = 'boy_'+str(count)+'.txt'  
     file_name_girl = 'girl_'+str(count)+'.txt' 
    
     #打开文件
     boy_file = open(file_name_boy,'w')         
     girl_file = open(file_name_girl,'w')     
     
     #writelines的参数是序列(比如列表),它会迭代帮你写入文件。
     boy_file.writelines(boy)     
     girl_file.writelines(girl) 
     
     #关闭文件对象
     boy_file.close()                                   
     girl_file.close()                          
     
     #当前写操作完毕后,必须进行初始化操作,以准备下一个的写入操作
     boy = []
     girl = []
     count += 1

#因为第三段对话的结尾没有"===",所以需要再次进行上面的重复写操作,保存第三段对话
#定义输出文件名称     
file_name_boy = 'boy_'+str(count)+'.txt'  
file_name_girl = 'girl'+str(count)+'.txt'  

#打开文件    
boy_file = open(file_name_boy,'w')         
girl_file = open(file_name_girl,'w') 

#writelines的参数是序列(比如列表),它会迭代帮你写入文件。     
boy_file.writelines(boy)   
girl_file.writelines(girl) 

#关闭文件对象      
boy_file.close()                                
girl_file.close()                    

#关闭文件对象
f.close()

代码二:

#定义一个保存文件的方法
def save_file(boy,girl,count):
    #定义输出文件名称
    file_name_boy = 'boy_' + str(count) + '.txt'
    file_name_girl = 'girl_' + str(count) + '.txt'
    #打开文件
    boy_file = open('E:\\%s'%file_name_boy,'w')
    girl_file = open('E:\\%s'%file_name_girl,'w')
    #writelines的参数是序列(比如列表),它会迭代帮你写入文件 
    boy_file.writelines(boy)
    girl_file.writelines(girl)
    #关闭文件对象 
    boy_file.close()
    girl_file.close()
#定义一个读取和分割文件内容的方法
def split_file(file_name):
    f = open('E:\\record.txt')
    #定义3个变量,并对它们初始化
    boy = []
    girl = []
    count = 1
    #循环读取文件
    for each_line in f:
        #如果当前内容不等于“======”,则读取内容分割;否则分类保存文件
        if each_line[:6] != '======':
            #读取的内容以“:”进行分割,分割后分别赋值给role和line_spoken
            (role,line_spoken) = each_line.split(':',1)
            #按对话角色分别把spoken追加到不同的表中
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            #保存文件
            save_file(boy,girl,count)
            #保存文件后,再初始化变量
            count += 1
            boy = []
            girl = []
    #因为第三段对话的结尾没有"===",所以需要再调用save_file方法,保存第三段对话
    save_file(boy,girl,count)
    f.close()
#主方法:只要调用split_file就可以完成所有的操作
split_file('E:\\record.txt')

注意:直接在record.txt所在目录下创建.py文件时,上述代码中的打开文件操作可以直接用文件名而不需要指明路径,上述两个文件不在同一目录下时,则应指明路径

--------------------------------------------------------------------我是一条分割线----------------------------------------------------------------------

 二、动动手:

0.编写一个程序,接受用户的输入并保存为新的文件:

先输入文件名,然后打开文件,调用write将输入的字符串写入文件中,以:w作为写完标识符,写完之后调用close函数即完成文件的写入。

def filewrite(file_name):
     print('请输入内容【单独输入‘:w’保存退出】:')
     f=open(file_name,'w')
     while True:
          a=input()
          if a!=':w':
              f.write('%s'% a)
          else:
               break
 
     f.close()
 
file_name=input('请输入文件名:')   
filewrite(file_name)

1.编写一个程序比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置:

def compare(fname1,fname2):
    f1 = open(fname1)
    f2 = open(fname2)
    count = 0#统计行数
    differ = []#统计不一样的数量
    for line1 in f1:
        line2 = f2.readline()
        count += 1
        if line1 != line2:
            differ.append(count)

    f1.close()
    f2.close()
    return differ

fname1 = input('请输入需要比较的头一个文件名:')
fname2 = input('请输入需要比较的另一个文件名:')

differ = compare(fname1,fname2)

lenth = len(differ)
if len(differ) == 0:
    print('两个文件完全一样!')
else:
    print('两个文件共有%d处不同'%len(differ))
    for each in differ:
        print('第%d行不一样'%each)

 3.编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上:

def file_view(file_name,line_nun):
    print('\n文件%s的前%s的内容如下:\n'%(file_name,line_num))
    f = open(file_name)
    for i in range(int(line_num)):
        print(f.readline(),end='')
 
    f.close()
 
file_name = input(r'请输入要打开的文件(如C:\\test.txt):')
line_num = input('请输入需要显示该文件前几行:')
file_view(file_name,line_num)

--------------------------------------------------------------------我是一条分割线----------------------------------------------------------------------

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值