zoukankan      html  css  js  c++  java
  • 小甲鱼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()中存在差别。
  • 相关阅读:
    SpringMVC Failed to instantiate [java.util.List]: Specified class is an interface
    github上项目直接在浏览器页面像VS Code一样查看代码
    springboot+dubbo整合swagger-ui+swagger-dubbo
    petalinux非离线模式build卡死在u-boot编译问题
    SystemC使用示例
    使用chisel做数字电路开发的Hello World
    lmgrd在Linux系统上的配置
    FFmpeg libswscale源码分析3-scale滤镜源码分析
    FFmpeg libswscale源码分析2-转码命令行与滤镜图
    FFmpeg libswscale源码分析1-API介绍
  • 原文地址:https://www.cnblogs.com/IT-NXXB/p/13338078.html
Copyright © 2011-2022 走看看