每日一“酷”之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 ...
随机推荐
- Oracle基础 物理备份 冷备份和热备份(转)
一.冷备份介绍: 冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件.控制文件.联机REDO LOG文件,将其拷贝到另外的位置.此外冷备份也可以包含对参数文件和口令文件的备份,但是这 ...
- IE浏览器部分版本不支持background-siza属性问题
background-size是CSS3新增的属性,但是IE8以下还是不支持,可以通过滤镜来实现这样的一个效果 background-size:contain; // 缩小图片来适应元素的尺寸(保持像 ...
- ionic 项目的启动屏幕
首先要做好图片,图片的大小最好是192px*192px(icon.png).2208px*2208px(splash.png); 然后在APP项目中建立一个新文件夹,resources,将准备好的两张 ...
- centos6.5 iptables实现端口转发
将本地接口IP 61.144.a.b 的3389端口 转发到 116.6.c.d的3389 (主要访问到61.144.a.b的3389端口,就会跳转到116.6.c.d的3389) [步骤] ...
- C#垃圾回收机制
C#属于托管的面相对象的语言,内存回收机制就是一个代表, C#有一套类似"全自动"的垃圾回收机制,也就是虚拟机会自动来判断执行内存的回收, 我们一般常用的Dispose(),Usi ...
- SQL中char、varchar、nvarchar
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. nvarcha ...
- asp.net中导出excel数据的方法汇总
1.由dataset生成 代码如下 复制代码 public void CreateExcel(DataSet ds,string typeid,string FileName) { Htt ...
- 网络请求的null值处理
最近项目中经常有遇到从服务器请求的数据是null的情况,这种情况下如果用[dic objectForKey:@"key"]方法,程序会发生崩溃现象,因为项目是以前的老项目,而且有太 ...
- OC9_代理正向传值
// // ProtectedDeleagate.h // OC9_代理正向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...
- 配置windows下驱动开发环境
1.下载安装Visual Studio 2008. 2.下载安装WDK 下载地址(点此下载) 建议完全安装,为了便于配置,作者安装到C盘.(C:/WinDDK) 3. ddkwizards(ddkwi ...