Pickle模块是用来处理2进制内容的
然后练习要求是:把record.txt内的内容,用pickle模块,将已分割好的内容分别放入6个文件内
要求如下
代码如下:
import pickle
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,'wb')
girl_file=open(file_name_girl,'wb')
pickle.dump(boy,boy_file)
pickle.dump(girl,girl_file)
boy_file.close()
girl_file.close()
def split_file(file_name): #先写的是分割文件内容这部分的参数,其实不用函数也可以做,只不过用函数封装起来比较好看。
boy=[] #建立boy和girl两个空列表,把分割出来的内容放进去
girl=[]
count=1 #这个count是用来命名文件夹时候用的,关系到文件夹后面的下划线数字
f=open(file_name)
for each_line in f: #迭代文件内容的每一行
if each_line[:6] != '======': #对于每一行内容进行判断,如果开头6位不是等号的话,因为源文件每段对话的分割标志是等号
(role,spoken)=each_line.split(':',1) #则对每一行进行分割,以冒号为界,这里的1为什么要标红!因为犯了错!有句子里面是有不止1个冒号的,这样用2个变量去赋 #值,会发生报错!!切记看清原文,不过加了1以后,就可以避免把后面的冒号分割的情况发生
if role == '小客服':
girl.append(spoken)
if role == '小甲鱼':
boy.append(spoken)
else:
save_file(boy,girl,count) #调用上面的其他函数,来保存文件
boy=[] #每次碰到分割符号以后,先保存文件,保存完以后,把boy和girl两个列表清空,以放在后面用
girl=[]
count+=1 #然后计数加1,保证后面保存文件的时候可以数字变化
save_file(boy,girl,count) #这里为什么在循环外再要保存一次呢???因为:他保存文件的触发条件是遇到等号=====,但是最后一段的结尾没有等号,所以要手动触 #发一次保存
f.close()
split_file('record.txt')