高渐飞 发表于 2018-7-16 15:16:56

A-15-Pickle模块练习

#coding: UTF-8

#知识点复习
"""
(1)pickle模块利用pickle算法,将python里的数据以二进制的形式,永久存储在磁盘的文件里,
(2)使用时:import pickle
(3)文件对象的后缀名最好为'.pkl', 当为'.txt'时, 里面的内容将显示为乱码(编码不同)
(4)当数据量很大时,采用pickle模块效果尤为显著,可以大大较小py文件
"""

#练习部分

#1.存储数据 pickle.dump(data, file):data→file data为要储存的数据对象,file为数据存储的文件对象

import pickle
file = open('D:\\python\\pickle_file\\file.pkl', 'wb')   #打开方式wb !!
data = [ 1, 4, ]
pickle.dump(data, file)
file.close()


#2.读取数据 pickle.load(file): file为数据存储的文件对象, 返回读取的数据, 例如:

file = open('D:\\python\\pickle_file\\file.pkl', 'rb')#打开方式rb !!
a = pickle.load(file)
print(a)
file.close()


#3.分离对话并存储(与A-13相同)
#思路-每段对话以====等为标志隔开,通过if语句监测即可
#在第n段对话中,通过split以冒号为分界线将说话人名称和说话内容分开,并通过append将说话内容添加到之前创建好的列表中
#当if监测到======时,说明该段对话已分离结束,通过pickle.dump(data,file)将对话内容以二进制形式存储到file中
#打开文件后,完成相应操作后,必须及时关闭文件!!!

import pickle

def split_file(path):
    f = open(path)
    boy = []      #设置中间缓冲 空列表
    girl = []
    count = 1

    for each_line in f:
      if each_line[:6] != '======':         #每段对话以====隔开
            (role, line_spoken) = each_line.split(':', 1)   #以冒号为界限分割1条符串,详见
            if role == '小甲鱼':         #如果冒号前面的内容为“小甲鱼”,则把后面的内容添加到boy列表
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
      else:
            make_pickle(boy,girl,count)

            count += 1
            boy = []
            girl = []

    make_pickle(boy,girl,count)

    f.close()


def make_pickle(boy,girl,count):
    boy_file = open('D:\\H-编程学习\\H-01-Python\\boy_%d.pkl' % count,'wb')
    girl_file = open('D:\\H-编程学习\\H-01-Python\\girl_%s.pkl' % str(count),'wb')

    pickle.dump(boy,boy_file)
    pickle.dump(girl,girl_file)

    girl_file.close()
    boy_file.close()


path ="D:\\H-编程学习\\H-01-Python\\CODE\\record.txt" #input('请输入路径:')
split_file(path)

#D:\H-编程学习\H-01-Python\CODE\record.txt'


import pickle
file = open('D:\\H-编程学习\\H-01-Python\\boy_1.pkl', 'rb')#打开方式为rb !!
a = pickle.load(file)
print(a)
file.close()
页: [1]
查看完整版本: A-15-Pickle模块练习