详解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中线程问题的简单讲解
Apr 03 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
django加载本地html的方法
May 27 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python发展简史 Python来历
May 14 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Python实现word2Vec model过程解析
Dec 16 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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输出表格的实现代码(修正版)
2010/12/29 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
犀利的js 函数集合
2009/06/11 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
python 实时遍历日志文件
2016/04/12 Python
Python制作刷网页流量工具
2017/04/23 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
python如何快速生成时间戳
2020/07/21 Python
如何通过python检查文件是否被占用
2020/12/18 Python
10张动图学会python循环与递归问题
2021/02/06 Python
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
综合测评自我鉴定
2013/10/08 职场文书
教师学习培训邀请函
2014/02/04 职场文书
县级文明单位申报材料
2014/05/23 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
MySQL深分页问题解决思路
2022/12/24 MySQL