详解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写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python深入学习之上下文管理器
Aug 31 Python
详解Python中的join()函数的用法
Apr 07 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
Python实现Dijkstra算法
Oct 17 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
python urllib爬虫模块使用解析
Sep 05 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
最省空间的计数器
2006/10/09 PHP
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
《蜗牛》教学反思
2014/02/18 职场文书
中介业务员岗位职责
2014/04/09 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
高三生物教学反思
2016/02/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android