您的位置:首页 > 理论基础

Python计算机视觉编程练习5:pickle模块学习

2015-11-12 15:38 411 查看

pickle

pickle可以接受几乎所有的python对象,并且将其转换成字符串表示,该过程叫封装(pickling),相反的过程叫拆封(unpickling)。

#python
"""
封装
"""
import pickle
from PIL import Image
from pylab import *
im = array(Image.open('test.jpg'))
l1 = ('ceshi',1,3.1415,[1,2,3,4])
f = open('results.pkl','wb')
pickle.dump(im,f) #保存图像数组
pickle.dump(l1,f) #保存元组
f.close()
"""
拆封
"""
f = open('results.pkl','rb')
im = pickle.load(f) # 载入图像数组
l1 = pickle.load(f) # 载入元组
f.close()


Tips:

使用 时务必记得关闭文件操作,否则会发生错误。为了防止这种错误,可以使用 with 语句来改写上面的语句。


#python
"""
封装
"""
import pickle
from PIL import Image
from pylab import *
im = array(Image.open('test.jpg'))
l1 = ('ceshi',1,3.1415,[1,2,3,4])
with open('results.pkl','wb') as f:
pickle.dump(im,f) #保存图像数组
pickle.dump(l1,f) #保存元组

"""
拆封
"""
with open('results.pkl','rb') as f:
im = pickle.load(f) # 载入图像数组
l1 = pickle.load(f) # 载入元组


cpickle

cpickle 模块是 pickle 模块的 c 语言编写的优化版本。基本使用的方法类似。可参考博文

1. dump: 将python对象序列化保存到本地的文件。

2. load: 载入本地文件,恢复python对象。

#python
"""
封装
"""
from PIL import Image
from pylab import *
import cpickle as pickle #更改这里就可以了
im = array(Image.open('test.jpg'))
l1 = ('ceshi',1,3.1415,[1,2,3,4])
with open('results.pkl','wb') as f:
pickle.dump(im,f) #保存图像数组
pickle.dump(l1,f) #保存元组

"""
拆封
"""
with open('results.pkl','rb') as f:
im = pickle.load(f) # 载入图像数组
l1 = pickle.load(f) # 载入元组


dumps:将python对象序列化保存到一个字符串变量中。

loads: 从字符串变量中载入python对象。

#python
"""
封装
"""
import cpickle as pickle #更改这里就可以了
l1 = ('ceshi',1,3.1415,[1,2,3,4])
p1 = pickle.dumps(l1)    #保存到字符串变量p1中

"""
拆封
"""
l1 = pickle.loads(p1)     #从字符串变量载入元组


保存图片

#python

from PIL import Image
im = Image.open('test.jpg').convert('L')
im.save(r'D:\Exp\Python\test1\images\01.jpg')   #路径+文件名即可


保存文本

#python
from numpy import *
list1 = [ 2015,11,11]
savetxt('test.txt',list1,'%i')     #文件名+需要存贮的变量+格式


保存列表

l = ['211', '135', '269', '157', '214', '247', '272', '275', '179', '286', '313', '329', '190', '318', '317', '370']

f = open('test.txt','wb+')
for j in l:
f.write(j)
f.write(' ')
f.close()


Tips1:

f.write(): must be string or buffer, not int


下面的例子就会报错~~~

l = ['211', '135', '269', '157', '214', '247', '272', '275', '179', '286', '313', '329', '190', '318', '317', '370']
# 字符转换成整型
for i in range(len(l)):
l[i] = int(l[i])
f = open('test.txt','wb+')
for j in l:
f.write(j)
f.write(' ')
f.close()


Tips2:

f = file(name[, mode[, buffering]])

入口参数:   name 文件名

mode   选项,字符串

buffering   是否缓冲 (0=不缓冲,1=缓冲, >1的int数=缓冲区大小)

返回值 : 文件对象

mode 选项:

"r"   以读方式打开,只能读文件 , 如果文件不存在,会发生异常

"w"   以写方式打开,只能写文件, 如果文件不存在,创建该文件 ; 如果文件已存在,先清空,再打开文件

"rb"  以二进制读方式打开,只能读文件 , 如果文件不存在,会发生异常

"wb"  以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件; 如果文件已存在,先清空,再打开文件

"rt"  以文本读方式打开,只能读文件 , 如果文件不存在,会发生异常

"wt"  以文本写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件

"rb+" 以二进制读方式打开,可以读、写文件 , 如果文件不存在,会发生异常

"wb+" 以二进制写方式打开,可以读、写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: