详解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脚本实现下载合并SAE日志
Feb 10 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
python比较两个列表大小的方法
Jul 11 Python
Flask之flask-script模块使用
Jul 26 Python
python实现名片管理系统
Nov 29 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Python类方法总结讲解
Jul 26 Python
解析python中的jsonpath 提取器
Jan 18 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用反撇号执行外部命令
2015/04/14 PHP
php基础教程
2015/08/26 PHP
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
js重写方法的简单实现
2016/07/10 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
js实现图片放大展示效果
2017/08/30 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
html5 标签
2009/07/16 HTML / CSS
企业治理工作自我评价
2013/09/26 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
保险公司年会主持词
2014/03/22 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书