• 小甲鱼Python第031讲:永久存储:腌制一缸美味的泡菜 | 课后测试题及参考答案


    0.pickle的实质是什么?

       主要就是利用一些算法将你的数据对象“腌制”成二进制文件,存储在磁盘上,当然也可以放在数据库或者通过网络传输到另一台计算机上。

    1.使用pickle的什么方法存储数据?

       pickle.dump(data,file).

      其中,第一个参数data表示待存储的数据对象;第二个参数表示目标存储的文件对象。注意要先使用“wb”的模式open文件。

    2.使用pickle的什么方法读取数据?

       pickle.load(file)

      其中参数表示目标存储的文件对象,注意要先使用“rb”的模式open文件。

    3.使用pickle能不能保存为“.txt”类型的文件?

      可以。不过打开后是乱码。因为打开模式为二进制模式。

    动动手:

    0.编写一个程序,这次要求使用pickle将文件(record.txt)里的对话按照以下要求腌制成不同的文件(没错,是第29讲的内容小改,考考你自己能写出来吗?)

    • 小甲鱼的对话单独保存为boy_*.txt(去掉“小甲鱼:”)
    • 小客服的对话单独保存为girl_*.txt(去掉“小客服:”)
    • 文件中总共有三段对话,分别保存为boy_1.txt,girl_1.txt,boy_2.txt,girl_2.txt,boy_3.txt,girl_3.txt共6 个文件。注意可以按照对话间的“=======”分割

     代码实现:

     1 # 正常
     2 def save_file(boy,girl,count):
     3     file_name_boy = "boy_"+ count + ".txt"
     4     file_name_girl = "girl_" + count + ".txt"
     5 
     6     boy_file = open(file_name_boy,"w")
     7     girl_file = open(file_name_girl, "w")
     8 
     9     boy_file.writelines(boy)
    10     girl_file.writelines(girl)
    11 
    12     boy_file.close()
    13     girl_file.close()
    14 
    15 def split_file(file_name):
    16     count = 1
    17     boy = []
    18     girl = []
    19     f = open(file_name)
    20     for each_line in f:
    21         if each_line[:6] != "======":
    22             role = each_line.split(":",1)[0]
    23             line_speak = each_line.split(":",1)[1]
    24             if role == "小甲鱼":
    25                 boy.append(line_speak)
    26             if role == "小白":
    27                 girl.append(line_speak)
    28         else:
    29             save_file(boy,girl,count)
    30             boy = []
    31             girl = []
    32             count += 1
    33 
    34     save_file(boy,girl,count)
    35     f.close()
    36 split_file("record.txt")
    37     
    38 # pickle
    39 import pickle
    40 def save_file_pkl(boy,girl,count):
    41     file_name_boy = "boy_" + count + ".txt"
    42     file_name_girl = "girl_" + count + ".txt"
    43     
    44     boy_file = open(file_name_boy,"wb")
    45     girl_file = open(file_name_girl,"wb")
    46     
    47     pickle.dump(boy,boy_file)
    48     pickle.dump(girl,girl_file)
    49     
    50     boy_file.close()
    51     girl_file.close()
    52 
    53 def split_file_pkl(file_name):
    54     count = 1
    55     boy = []
    56     girl = []
    57     f = open(file_name)
    58     for each_line in f:
    59         if each_line[:6] != "======":
    60             data = each_line.split(":",1)
    61             role = data[0]
    62             line_speak = data[1]
    63             if role =="小甲鱼":
    64                 boy.append(line_speak)
    65             if role == "小白":
    66                 girl.append(line_speak)
    67         else:
    68             save_file_pkl(boy,girl,count)
    69             count += 1
    70             boy = [] 
    71             girl = []
    72     save_file_pkl(boy,girl,count)
    73     f.close()
    74 split_file_pkl("record.txt")
    75 
    76 # 注释:函数只有在save_file()中存在差别。
  • 相关阅读:
    Serverless 架构下的服务优雅下线实践
    容器技术之发展简史
    Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速
    阿里云研究员叔同:Serverless 正当时!
    精准容量、秒级弹性,压测工具 + SAE 方案如何成功突破传统大促难关?
    如何提升微服务的幸福感?
    Dubbo 3.0 前瞻之:常用协议对比及 RPC 协议新形态探索
    服务发现技术选型那点事儿
    [漫谈] 状态
    [漫谈] 软件设计的目标和途径
  • 原文地址:https://www.cnblogs.com/IT-NXXB/p/13338078.html
Copyright © 2020-2023  润新知