澳门威尼斯人注册网址【官网首页】
做最好的网站

代码整理与总结,一个任务

来源:http://www.ogcoffee123.com 作者:澳门威尼斯人注册网址 人气:170 发布时间:2019-12-01
摘要: 代码清单1: 事实上可以利用函数封装得更好看些:   任务:将文件(record.txt)中的数据进行分割,并安装以下规则保存起来。   1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼

图片 1

  代码清单1:

图片 2

事实上可以利用函数封装得更好看些:

  任务:将文件(record.txt)中的数据进行分割,并安装以下规则保存起来。
  1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")
  2.小客服的对话单独保存为girl_*.txt的文件(去掉"小客服:")
  3.文件中总共有三段对话,分别保存为boy_1.txt、boy_2.txt、boy_3.txt、gilr_1.txt、gilr_2.txt、gilr_3.txt
      共6个文件。(提示:不同的对话已经使用"===="进行分割)

练习题:将文件(record.txt)中的数据使用pickle将文件分割成不同文件:

f = open('record.txt')

boy = []
girl = []
count = 1

for each_line in f:
    if each_line[:6] != '======':
        (role, line_spoken) = each_line.split(':', 1)
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '小客服':
            girl.append(line_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')

        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')

boy_file.writelines(boy)
girl_file.writelines(girl)

boy_file.close()
girl_file.close()

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

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

#循环读取文件
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()   

 1、下面是存放list1这个列表到d盘test.pkl文件内:

图片 3

  问题延伸: 如下图:为什么boy[]、girl[]、count位置不同,结果完全不同呢?

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

图片 4

 

图片 5

(1)小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)

  原因分析:
   因为boy,girl,count三个变量是做为split_file()函数的局部变量,当把它们放在split_file()里面的时候,是对3个变量进行了初始化。
   但是当你把它们放到下面save_file()函数里面的时候,就是在save_file()函数里面重新定义了三个名叫boy, girl,count的变量,
   那么它和split_file()函数里面的变量是完全没有关系的。

  unpickling(读取):将文件内的二进制流转换为对象

  一、一个任务

  图片 6

record.txt文件内容如下:

(3)文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)

#定义一个保存文件的方法
def save_file(boy,girl,count):

   #定义输出文件名称
   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() 

#定义一个读取和分割文件内容的方法   
def read_file(filename):

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

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

   #循环读取文件
   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:
       #保存文件
       save_file(boy,girl,count)     

       #保存完文件后,再初始化变量       
       boy = []
       girl = []
       count += 1

   #因为第三段对话的结尾没有"===",所以需要再调用save_file方法,保存第三段对话
   save_file(boy,girl,count)

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

#主方法:只要调用read_file就可以完成所有的操作
read_file('E:\python\record.txt')  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!
def save_file(boy, girl, count):
    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')

    boy_file.writelines(boy)
    girl_file.writelines(girl)

    boy_file.close()
    girl_file.close()


def split_file(file_name):
    f = open('record.txt')

    boy = []
    girl = []
    count = 1

    for each_line in f:
        if each_line[:6] != '======':
            (role, line_spoken) = each_line.split(':', 1)
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)

            boy = []
            girl = []
            count += 1

    save_file(boy, girl, count)

    f.close()


split_file('record.txt')

  代码清单2:

pickle.load(file)
  注解:从file中读取一个字符串,并将它重构为原来的python对象。
  file:类文件对象,有read()和readline()接口。

图片 7

 

图片 8

#coding=utf-8
def writefile(girl_list,boy_list,count):

    girl_file = open(r'D:girl_'+ str(count) +'.txt','wb')

    boy_file = open(r'D:boy_'+ str(count) +'.txt','wb')
    girl_file.dump(girl_list,girl_file)
    boy_file.dump(boy_list,boy_file)


    girl_file.close()
    boy_file.close()

def split_file(file_name):
    boy_list = []
    girl_list = []
    count = 1
    f = open(file_name)

    for each_line in f:
        if each_line[:6] != '======':
            (name,content) = each_line.split(':',1)
            if name == '小客服':
                girl_list.append(each_line)

            else:
                boy_list.append(each_line)


        else:
            writefile(girl_list,boy_list,count)
            boy_list.clear()
            girl_list.clear()
            count += 1
    writefile(girl_list,boy_list,count)
    f.close()

split_file('D:\record.txt')

图片 9

依旧是以二进制形式读取文件(rb)

目录:

  上次我提到了对文件的读写等一系列操作,回想下,要想从文件内读取内容无论是read还是readline,读取出来的是不是都是字符串呢?那么如果想让字典、列表这些数据类型保存进文件到读取出来都是原来的类型不变呢?这时我们引进一个pytho新的模块,解决这个难题!

*******************************

pickle.dump(obj, file, [,protocol])
  注解:将对象obj保存到文件file中去。
     protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
     file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。

(2)小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)

2、下面是从文件内读取刚刚保存的列表:

图片 10

以上即为文件内容,尝试着写出上面的代码吧,答案如下:

图片 11

  pickling(存放):可以将python的对象以二进制流形式存放在文件内

 

图片 12

****************

记得打开文件要以二进制形式打开(b)

图片 13

  pickle的实质就是利用一些算法将你的数据对象转变成二进制文件,储存在磁盘上,也可存在数据库或者其它机器上。

 

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

****************

  二、课时29课后习题及答案

一、一个任务

图片 14

 

*******************************

图片 15

二、课时29课后习题及答案

图片 16

图片 17

本文由澳门威尼斯人注册网址发布于澳门威尼斯人注册网址,转载请注明出处:代码整理与总结,一个任务

关键词:

上一篇:面向对象介绍

下一篇:可选值

频道精选

最火资讯