python知识点结构(五)(5.1标准类型)5.2控制和函数5.2.4-腌咸菜pickle
pickle简介
pickle 是一个真正能让你的程序暂时活动起来的模块,更深一层理解是一种逻辑算法。
pickle使用前需要调用,import pickle
pickle英文含义泡菜,可以记为腌咸菜函数pickle,因为它和腌制咸菜有两个相同的特点,1)放进去的东西不变质。---即写入文件列表读出来的时候还是列表,总结放进去的所有数据结构,读出后保持数据结构原属性。2)什么菜都能放。---即无论什么数据结构都能以pickle方式写入和读出。
放置的容器都是文件,但是经过pickle腌制的数据结构放进文件,用的时候再用pickle解腌制一遍(去去盐),就能正常用。
import pickle tempusr1 = {} accnt = {'user1':tempusr1,} tempusr1['name'] = 'liuxiao' tempusr1['code'] = '123' print (accnt) filep = open('C:\Python27\picklian\pick.txt','wb') picktemp = pickle.dumps(accnt) print (type(picktemp)) filep.write(picktemp) filep.close() filep = open('C:\Python27\picklian\pick.txt','rb+') fcon = filep.read() pickcon=pickle.loads(fcon) filep.close() tempusr1['name'] = 'wangying' tempusr1['code'] = 'asd' pickcon['user2'] = tempusr1 pickcon['user1']['code'] = '890' filep = open('C:\Python27\picklian\pick.txt','wb+') filep.write(pickle.dumps(pickcon)) filep.seek(0) #rcon = filep.read() con = pickle.loads(filep.read()) print (con) >>> RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/yonghuzhuce.py {'user1': {'code': '123', 'name': 'liuxiao'}} <class 'bytes'> {'user1': {'code': '890', 'name': 'liuxiao'}, 'user2': {'code': 'asd', 'name': 'wangying'}} >>>
更简单的dump和load的方法,注意1)用load就不再使用read,2)load()参数只要句柄,3)等于原来的先腌制,再write()。
import pickle tempusr1 = {} accnt = {'user1':tempusr1,} tempusr1['name'] = 'liuxiao' tempusr1['code'] = '123' print (accnt) filep = open('C:\Python27\picklian\pick.txt','wb') pickle.dump(accnt,filep) ############使用dump,load更简洁。 filep.close() filep = open('C:\Python27\picklian\pick.txt','rb+') pickcon = pickle.load(filep) ############使用dump,load更简洁。 filep.close() tempusr1['name'] = 'wangying' tempusr1['code'] = 'asd' pickcon['user2'] = tempusr1 pickcon['user1']['code'] = '890' filep = open('C:\Python27\picklian\pick.txt','wb+') pickle.dump(pickcon,filep)############使用dump,load更简洁。 filep.seek(0) con = pickle.load(filep)############使用dump,load更简洁。 print (con) >>> RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/pickdump.py {'user1': {'name': 'liuxiao', 'code': '123'}} {'user1': {'name': 'liuxiao', 'code': '890'}, 'user2': {'name': 'wangying', 'code': 'asd'}} >>>
注意:1)pickle将数据结构转化为字节,所以无论读写都要wb或rb
filep = open('C:\Python27\picklian\pick.txt','wb')
filep = open('C:\Python27\picklian\pick.txt','rb')
2)pickle返回类型为bytes。
picktemp = pickle.dumps(accnt) print (type(picktemp)) >>> <class 'bytes'>
3)pickle.dump(obj,f)其中f为句柄。
浙公网安备 33010602011771号