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+" 以二进制写方式打开,可以读、写文件, 如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件
相关文章推荐
- 数据结构与算法(1)支线任务3——Largest Rectangle in Histogram
- 使用Fiddler进行IOS APP的HTTP抓包
- 网络后台开发面试题
- 【转】HttpClient 教程 (一)
- 一个计算机毕业生的经历
- muduo库阅读(40)——Net部分:TCP服务器TcpServer
- http headers
- socket发送http报文的疑惑(求高手指点一二)
- Wireshark工具——网络抓包
- 【转】RTMP/RTP/RTSP/RTCP协议对比与区别介绍
- 【c++版数据结构】链队列的实现
- Android网络通信篇:Socket TCP(简易聊天室)
- 多线程网络(二)
- HTTP 返回304
- Android网络通信必备神器Volley详解——发送一个标准的Request
- OkHttp使用教程
- URL中的汉字和特殊字符编码,以及ASIHTTPRequest对此的处理
- Android 网络编程
- whireshark工具使用和tcp报文学习心得
- 旭说数据结构之线性表