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

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) # 载入元组
  1. dumps:将python对象序列化保存到一个字符串变量中。
  2. 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 = [ 20151111]
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+" 以二进制写方式打开,可以读、写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风❤水墨

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值