详解Python中的array数组模块相关使用


Posted in Python onJuly 05, 2016

初始化
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)

数组配置为包含一个字节序列,用一个简单的字符串初始化。

>>> ================================ RESTART ================================
>>> 
As string: This is the array.
As array : array('c', 'This is the array.')
As hex  : 54686973206973207468652061727261792e

处理数组
类似于其他python序列,可以采用同样方式扩展和处理array。

import array
import pprint
a = array.array('i', xrange(3))
print 'Initial :', a
a.extend(xrange(3))
print 'Extended:', a
print 'slice: :', a[2:5]
print 'Itetator:'
print list(enumerate(a))

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

>>> ================================ RESTART ================================
>>> 
Initial : array('i', [0, 1, 2])
Extended: array('i', [0, 1, 2, 0, 1, 2])
slice: : array('i', [2, 0, 1])
Itetator:
[(0, 0), (1, 1), (2, 2), (3, 0), (4, 1), (5, 2)]


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

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_input = input.read()
  print 'Raw Contents:', binascii.hexlify(raw_data)

  input.seek(0)
  a2 = array.array('i')
  a2.fromfile(input, len(a))
  print 'A2: ', a2

   

候选字节顺序
如果数组中的数据没有采用固有的字节顺序,或者在发送到一个采用不同字节顺序的系统前需要交换顺序,可以在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 value in zip(to_hex(a1), a1, to_hex(a2), a2):
  print fmt % value

byteswap()会交换C数组中元素的字节顺序,比在python中循环处理数据高效的多。   

>>> ================================ RESTART ================================
>>> 
  A1_hex     A1   A2_hex     A2
---------- ---------- ---------- ----------
 00000000     0  00000000     0
 01000000     1  00000001  16777216
 02000000     2  00000002  33554432
 03000000     3  00000003  50331648
 04000000     4  00000004  67108864
Python 相关文章推荐
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
python TCP包注入方式
May 05 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
Python中可变和不可变对象的深入讲解
Aug 02 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 #Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 #Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 #Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 #Python
Python实现代码统计工具(终极篇)
Jul 04 #Python
在win和Linux系统中python命令行运行的不同
Jul 03 #Python
win10系统中安装scrapy-1.1
Jul 03 #Python
You might like
PHP语法速查表
2007/01/02 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
JS中的三个循环小结
2017/06/20 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
《九寨沟》教学反思
2014/04/08 职场文书
客户经理岗位职责
2015/01/31 职场文书
英文版辞职信
2015/02/28 职场文书
2016春节慰问信范文
2015/03/25 职场文书
升职自荐信范文
2015/03/27 职场文书
光荣之路观后感
2015/06/12 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书