python存取数据进阶技巧-pickle,array模块
2017-06-15 21:19
267 查看
我们在存/取数据时,没有必要存成文本形式,多试试二进制形式,文本只是骗骗眼睛的,要更快和更高效
1.数组形式
如果我们需要一个之包含数字的列表,那就试试array.array,注意,不是numpy模块下的,他是自己独立的模块,支持同样的pop,insert,extend操作,同时还支持从文件存/取文件更快的方法.
#!/usr/bin/python # coding=utf-8 # __author__='dahu' # data=2017- # 创建1000万个浮点数,存取文件,速度相当快 # 这里的array不是numpy下面的,他是独立的 from array import array # 导入array类型 from random import random import time floats = array('d', (random() for i in range(2))) print type(floats) print time.ctime() floats = array('d', (random() for i in range(10 ** 7))) # 建立爽精度浮点数组,类型码'd',生成器表达式生成 print 'End value -> ',floats[-1] with open('f1', 'wb') as f: floats.tofile(f) # 数组存入二进制文件里 floats2 = array('d') with open('f1', 'rb') as f: floats2.fromfile(f, 10 ** 7) # 读取 print 'End value -> ',floats2[-1] print floats == floats2 print time.ctime()
结果:
/usr/bin/python2.7 /home/dahu/json_folder/descripter_exercise/bisect.lianxi/array.test.py <type 'array.array'> Thu Jun 15 15:45:52 2017 End value -> 0.85158039292 End value -> 0.85158039292 True Thu Jun 15 15:45:54 2017 Process finished with exit code 0
2.python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
注意这里使用的pprint模块,可以打印数据结构
write
#!/usr/bin/python #coding=utf-8 #__author__='dahu' #data=2017- # import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] # selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
read
#!/usr/bin/python #coding=utf-8 #__author__='dahu' #data=2017- # import pprint, pickle pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close() pprint.pprint(range(5))
结果:
/usr/bin/python2.7 /home/dahu/json_folder/descripter_exercise/bisect.lianxi/pickle..test.read.py {'a': [1, 2.0, 3, (4+6j)], 'b': ('string', u'Unicode string'), 'c': None} [1, 2, 3] [0, 1, 2, 3, 4] Process finished with exit code 0
相关文章推荐
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化
- matlab使用文本文件(.txt)进行数据存取的技巧总结(相当的经典,转载)
- 使用文本文件(.txt)进行数据存取的技巧总结(上)
- python数据持久存储:pickle模块的基本使用
- python进阶二_基本数据类型与操作
- python数据持久存储:pickle模块的基本使用
- Python例程:使用adodbapi存取二进制数据
- 【转载】使用文本文件(.txt)进行数据存取的技巧总结
- python模块整理26-数据持久性pickle、shelve、SQLite
- python 之pickle模块--输出保存到文本(基本的数据序列和反序列化)
- 使用文本文件(.txt)进行数据存取的技巧总结(下)
- 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)
- 使用文本文件(.txt)进行数据存取的技巧总结
- python数据持久存储:pickle模块的基本使用 分类: python python基础学习 python 小练习 2013-06-17 14:41 209人阅读 评论(0) 收藏
- 使用文本文件(.txt)进行数据存取的技巧总结
- 【转帖】使用python爬虫抓站的一些技巧总结:进阶篇
- 在Python 3.0中持久化数据至文件中,使用pickle
- python3.3.3 pickle打包数据到文件
- 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)
- 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)