zoukankan      html  css  js  c++  java
  • 零基础学习python_pickle(31课)

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

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

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

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

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

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

    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、下面是从文件内读取刚刚保存的列表:

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

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

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

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

    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了!!
    小甲鱼:哪里的?
    小客服:上海的
    小甲鱼:那正常,哪家公司?
    小客服:他没说呀。
    小甲鱼:哦
    小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
    小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
    小客服:滚!!!

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

    复制代码
    #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:oy_'+ 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')
  • 相关阅读:
    20155239 2016-2017-2 《Java程序设计》第7周学习总结
    20155231 2016-2017-2 《Java程序设计》第4周学习总结
    20155231 2016-2017-2 《Java程序设计》第3周学习总结
    20155231 2016-2017-2 《Java程序设计》第2周学习总结
    20155231 2016-2017-2 《Java程序设计》第1周学习总结
    第三次预作业20155231邵煜楠:虚拟机上的Linux学习
    预备作业2:阅读心得(20155231邵煜楠)
    博客初体验:我期望的师生关系
    安装虚拟机
    20155227第二次预备作业
  • 原文地址:https://www.cnblogs.com/leixiaobai/p/7774067.html
Copyright © 2011-2022 走看看