每日一“酷”之array
array--国定类型数据序列
array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型。
1、初始化
array实例化时可以提高一个参数来描述允许哪个种数据类型,还可以有一个初始的数据序列存储在数组中。
import array
import binascii
s = 'This is the array.'
a = array.array('c',s) print 'As string:', s
print 'As array :', a
print 'As hex :', binascii.hexlify(a)
运行结果:
这个例子总,数组配置为包含一个字节序列,用一个简单的字符串初始化,array.array('c','xxxx') 中的‘c’代表是字符串的意思。
其中binascii模块的作用是:其中包含很多在二进制和ASCII编码的二进制表示转换的方法。hexlify(data) 作用是返回的二进制数据的十六进制表示。
2、处理数组
类似于其他的Python序列,可以采用同样的方式扩展和处理array
import array
a = array.array('i',xrange(3))
print 'Initial :', a
a.extend(xrange(3))
print 'Extended:',a
print 'Slice :',a[2:5]
print 'Iterator'
print list(enumerate(a))
执行结果:
目前支持的操作包括分片、迭代以及向末尾增加元素。
使用enumerate(data)迭代数据,返回的是序列的每条记录的序号和内容组成的元组
3、数组与文件
可以使用高效读写文件的专用内置方法将数组的内容写入文件或者从文件读入数组。
import array
import binascii
import tempfile a = array.array('i',xrange(5))
print 'A1:',a output = tempfile.NamedTemporaryFile()
a.tofile(output.file)
output.flush() with open(output.name,'rb') as input:
raw_data = input.read()
print 'Raw Contents:',binascii.hexlify(raw_data) input.seek(0)
a2 = array.array('i')
a2.fromfile(input, len(a))
print 'A2:',a2
执行结果:
这个例子展示了直接从二进制文件读取原始数据,将它读入一个新的数组,并吧字节转换为适当的类型。
with 用法(可以增加代码的友好度,它自身可以关闭文件无需调用close()方法):
with open('a.txt') as f:
print f.readlines()
4、候选字节顺序
如果数组中的数据没有采用固有的字节顺序,或者在发送到一个采用不同字节顺序的系统之前需要交换顺序,可以由Python转换整个数组而无需迭代处理每一个元素。
import array
import binascii def to_hex(a):
chars_per_item = a.itemsize * 2
hex_version = binascii.hexlify(a)
num_chunks = len(hex_version) / chars_per_item
for i in xrange(num_chunks):
start = i * chars_per_item
end = start + chars_per_item
yield hex_version[start:end] a1 = array.array('i',xrange(5))
a2 = array.array('i',xrange(5))
a2.byteswap() fmt = '%10s %10s %10s %10s'
print fmt % ('A1 hex','A1','A2 hex','A2')
print fmt % (('-'*10,) * 4)
for values in zip(to_hex(a1),a1,to_hex(a2),a2):
print fmt % values
处理结果:
其中byteswap()方法会交换C数组中元素的字节顺序,比在Python中循环处理数据高效的多。
如果 yield 存在在一个函数中那么整个函数就是 一个Generator 具体用法请参照:http://blog.csdn.net/scelong/article/details/6969276
zip()函数 可以接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表
每日一“酷”之array的更多相关文章
- 每日一“酷”之Cookie
Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...
- 每日一“酷”之Queue
Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...
- 每日一“酷”之pprint
pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅 ...
- 每日一“酷”之copy
Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1. 浅副本 copy()创建的浅副 ...
- 每日一“酷”之heapq
作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全 ...
- 每日一“酷”之bisect
作用:维护有序列表,而不必在每次想列表增加一个元素时调用sort排序 bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序.有些情况下,这比反复对一个了表序列更高效,另外也比构建一 ...
- 每日一“酷”之difflib
介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...
- 每日一“酷”之textwrap
介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 sample_text = ''' I’m ver ...
- 每日一“酷”之string
介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...
随机推荐
- RegisterStartupScript和RegisterClientScriptBlock的用法
RegisterStartupScript和RegisterClientScriptBlock的用法 RegisterStartupScript(key, script) RegisterClient ...
- 【Linux/Ubuntu学习 13】ubuntu上好用的pdf软件okular
step 1: 安装 sudo apt-get install okular step 2: 注释 按 F6 快捷方式打开注释功能,你会发现太神奇了. step 3: 中文配置 如果安装完成后中文显示 ...
- Android小项目之四 自动更新检查的逻辑
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- 元数据metadata 对IO有多大影响
日志文件系统(journaling file systems)可防止系统崩溃时导致的数据不一致问题.对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生 系统崩溃时可以根据日志 ...
- Kinect For Windows V2开发日志一:开发环境的配置
算是正式进军Kinect了,前段时间学的东西现在就忘了,于是从此开始记录一下. 目前为止大部分的学习资料来自于Heresy的博客,写的非常优秀,清晰明了,十分感谢.开发语言为C++,应该会一直使用,但 ...
- 转 : React Native 开发之 IDE 选型和配置
转:https://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112392&idx=1&sn=135e29ddde30 ...
- poj动态规划列表
[1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...
- [wordpress] 输出一个过滤器绑定的方法
参考了WordPress: How do I get all the registered functions for 'the_content' filter, function print_fil ...
- 百度地图LBS开放平台AK一直没有用
http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;114.21892734521,29.57542 ...
- ANDROID内存优化——大汇总(转)
原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...