详解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格式化压缩后的JS文件的方法
Mar 05 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
Python编写登陆接口的方法
Jul 10 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
Python生成短uuid的方法实例详解
May 29 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
python查询MySQL将数据写入Excel
Oct 29 Python
如何在Python中创建二叉树
Mar 30 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
javascript基本类型详解
2014/11/28 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
新手入门js闭包学习过程解析
2019/10/08 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
Python程序中设置HTTP代理
2016/11/06 Python
python中import reload __import__的区别详解
2017/10/16 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
大学新闻系求职信
2014/06/03 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python