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的更多相关文章

  1. 每日一“酷”之Cookie

    Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...

  2. 每日一“酷”之Queue

    Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...

  3. 每日一“酷”之pprint

    pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅 ...

  4. 每日一“酷”之copy

    Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1.  浅副本 copy()创建的浅副 ...

  5. 每日一“酷”之heapq

    作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全 ...

  6. 每日一“酷”之bisect

    作用:维护有序列表,而不必在每次想列表增加一个元素时调用sort排序 bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序.有些情况下,这比反复对一个了表序列更高效,另外也比构建一 ...

  7. 每日一“酷”之difflib

    介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...

  8. 每日一“酷”之textwrap

    介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 sample_text = ''' I’m ver ...

  9. 每日一“酷”之string

    介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...

随机推荐

  1. 递归删除指定目录下的 .git 文件

    转载自:http://my.oschina.net/armsky/blog/34447 find . -name .git | xargs rm -fr 其中对 xargs 的介绍,可以参照以下内容: ...

  2. 程序员新人怎样在复杂代码中找 bug?

    分享下我的debug的经验 1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间. 2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经 ...

  3. 《UNIX环境高级编程》学习心得 二

    窝萌来看我们看到这本书里的第一个程序 #include "apue.h" #include <dirent.h> int main(int argc, char *ar ...

  4. [freemarker篇]04.简单介绍-基本数据类型

    好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新第四章,这里只能说是简单介绍,因为权威的还是需要看Freemarker的官方中文手册! 好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新 ...

  5. C# 学习笔记03 DataTable

    1. DataTable 类对象表示一个内存中数据表.可以用来存放从数据库得到的DataSet. DataTable dt = SqlHelper.ExecuteDataTable(parameter ...

  6. EasyPusher推流服务接口的.NET导出

    本文是在使用由 EasyDarwin 团队开发的EasyPusher时导出的C++接口的.NET实现 public class EasyPushSDK { public EasyPushSDK() { ...

  7. c#中进程的使用

    C#的Process类的一些用法 更多0   c#   进程 c#之process类相关整理 一.根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 usin ...

  8. Windows优化大师最新版 V7.99 Build 12.604发布

    本文由 www.169it.com 收集整理 Windows优化大师是一款功能强大的系统工具软件,它提供了全面有效且简便安全的系统检测.系统优化.系统清理.系统维护四大功能模块及数个附加的工具软件.使 ...

  9. dropdownlist分页

    <div class="new-paging" id=""> <div class="new-tbl-type"> ...

  10. Objective-C 【@property 的参数问题】

    ------------------------------------------- @property参数 总的来说,这是一种编译器的特性(在生成@property的时候为@property添加相 ...