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'}}
>>> 
View Code

更简单的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'}}
>>> 
View Code

 

 

注意: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'>
View Code

  3)pickle.dump(obj,f)其中f为句柄。

 

posted on 2016-06-05 11:48  lexn  阅读(83)  评论(0)    收藏  举报

导航