array--国定类型数据序列

array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型。

1、初始化

  array实例化时可以提高一个参数来描述允许哪个种数据类型,还可以有一个初始的数据序列存储在数组中。

  

  1. import array
  2. import binascii
  3. s = 'This is the array.'
  4. a = array.array('c',s)
  5.  
  6. print 'As string:', s
  7. print 'As array :', a
  8. print 'As hex :', binascii.hexlify(a)

运行结果:

这个例子总,数组配置为包含一个字节序列,用一个简单的字符串初始化,array.array('c','xxxx') 中的‘c’代表是字符串的意思。

其中binascii模块的作用是:其中包含很多在二进制和ASCII编码的二进制表示转换的方法。hexlify(data) 作用是返回的二进制数据的十六进制表示。

2、处理数组

  类似于其他的Python序列,可以采用同样的方式扩展和处理array  

  1. import array
  2.  
  3. a = array.array('i',xrange(3))
  4. print 'Initial :', a
  5.  
  6. a.extend(xrange(3))
  7. print 'Extended:',a
  8.  
  9. print 'Slice :',a[2:5]
  10.  
  11. print 'Iterator'
  12. print list(enumerate(a))

执行结果:

目前支持的操作包括分片、迭代以及向末尾增加元素。

使用enumerate(data)迭代数据,返回的是序列的每条记录的序号和内容组成的元组

3、数组与文件

  可以使用高效读写文件的专用内置方法将数组的内容写入文件或者从文件读入数组。

  

  1. import array
  2. import binascii
  3. import tempfile
  4.  
  5. a = array.array('i',xrange(5))
  6. print 'A1:',a
  7.  
  8. output = tempfile.NamedTemporaryFile()
  9. a.tofile(output.file)
  10. output.flush()
  11.  
  12. with open(output.name,'rb') as input:
  13. raw_data = input.read()
  14. print 'Raw Contents:',binascii.hexlify(raw_data)
  15.  
  16. input.seek(0)
  17. a2 = array.array('i')
  18. a2.fromfile(input, len(a))
  19. print 'A2:',a2

 执行结果:

  

 这个例子展示了直接从二进制文件读取原始数据,将它读入一个新的数组,并吧字节转换为适当的类型。

with 用法(可以增加代码的友好度,它自身可以关闭文件无需调用close()方法):

  with open('a.txt') as f:

    print f.readlines()

4、候选字节顺序

  如果数组中的数据没有采用固有的字节顺序,或者在发送到一个采用不同字节顺序的系统之前需要交换顺序,可以由Python转换整个数组而无需迭代处理每一个元素。

  1. import array
  2. import binascii
  3.  
  4. def to_hex(a):
  5. chars_per_item = a.itemsize * 2
  6. hex_version = binascii.hexlify(a)
  7. num_chunks = len(hex_version) / chars_per_item
  8. for i in xrange(num_chunks):
  9. start = i * chars_per_item
  10. end = start + chars_per_item
  11. yield hex_version[start:end]
  12.  
  13. a1 = array.array('i',xrange(5))
  14. a2 = array.array('i',xrange(5))
  15. a2.byteswap()
  16.  
  17. fmt = '%10s %10s %10s %10s'
  18. print fmt % ('A1 hex','A1','A2 hex','A2')
  19. print fmt % (('-'*10,) * 4)
  20. for values in zip(to_hex(a1),a1,to_hex(a2),a2):
  21. 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. 通用权限底层研究:Web应用限制IP访问的功能实现

    如果你的web应用受到恶意扫描或攻击,你会怎么处理呢?大多数时候从应用日志里可以看到恶意扫描或攻击,遇到此类情况,如有一个可以进行IP访问控制的功能就好些了. 现将在MVC下实现的一个IP访问限制功能 ...

  2. Android开发——实现固定在ScrollView顶部的View,类似于新浪微博的评论列表的顶部

    现在很多App都实现了这个功能,例如新浪微博评论页面的评论.转发.赞的数字可以固定在屏幕上方.我个人很喜欢这种设计,所以利用一点空余时间简单实现了一个类似的功能. 先来看一下上面这张图的效果 这个是新 ...

  3. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  4. POJ 2236 Wireless Network (并查集)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 18066   Accepted: 761 ...

  5. Storm累计求和中使用各种分组Grouping

    Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证bolt中的每个任务接收到的tuple数目相同.(它能实现较好的负载均衡) Fields Grouping: ...

  6. hdu 2295 DLX

    思路:裸的DLX重复覆盖 #include<set> #include<cmath> #include<queue> #include<cstdio> ...

  7. Mousetrap - Keyboard shortcuts in Javascript

    Mousetrap is a simple library for handling keyboard shortcuts in Javascript. It is around 2kb minifi ...

  8. YuXi-钰玺博客

    本博客将与YuXi-钰玺博客进行同步更新! YuXi-钰玺博客:www.studenty.cn

  9. Part 7 Joins in sql server

    Joins in sql server Advanced or intelligent joins in sql server Self join in sql server Different wa ...

  10. 深刻理解C#中资源释放

    今天我的一个朋友看到我写的那篇<C#中用AJAX验证用户登录>时,给我指出了点小毛病.就是在用户登录时,如果用户登录失败,在下面这段代码中,都会new出来一个User对象,如果连续登录失败 ...