详解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中随机函数random用法实例
Apr 30 Python
利用Python破解验证码实例详解
Dec 08 Python
详解python中requirements.txt的一切
Mar 03 Python
基于hashlib模块--加密(详解)
Jun 21 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
机器学习实战之knn算法pandas
Jun 22 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python错误的处理方法
Jun 23 Python
Django model重写save方法及update踩坑详解
Jul 27 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
动态添加js事件实现代码
2009/03/12 Javascript
javascript 写类方式之四
2009/07/05 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
python脚本设置系统时间的两种方法
2016/02/21 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python之array赋值技巧分享
2019/11/28 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
服装设计专业自荐书范文
2013/12/30 职场文书
《落花生》教学反思
2014/02/25 职场文书
政治表现评语
2014/05/04 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
python如何进行基准测试
2021/04/26 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
对象析构函数__del__在Python中何时使用
2022/03/22 Python