小甲鱼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()中存在差别。
原文地址:https://www.cnblogs.com/IT-NXXB/p/13338078.html