详解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 28 Python
VSCode下好用的Python插件及配置
Apr 06 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Django 中间键和上下文处理器的使用
Mar 17 Python
python内存动态分配过程详解
Jul 15 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python如何判断IP地址合法性
Apr 05 Python
哪些是python中web开发框架
Jun 17 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
opencv实现图像平移效果
Mar 24 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的库,结果发现很多东西
2006/12/31 PHP
JS 网站性能优化笔记
2011/05/24 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
php数组指针操作详解
2017/02/14 PHP
JavaScript中的私有成员
2006/09/18 Javascript
jQuery 使用个人心得
2009/02/26 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
python3设计模式之简单工厂模式
2017/10/17 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python 下载及安装详细步骤
2019/11/04 Python
iPython pylab模式启动方式
2020/04/24 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
升职自荐信
2013/11/28 职场文书
学校运动会霸气口号
2014/06/07 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
客户答谢会致辞
2015/01/20 职场文书
小学大队委竞选口号
2015/12/25 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
一文搞懂Redis中String数据类型
2022/04/03 Redis