详解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的web框架中的Model的教程
Apr 29 Python
Python装饰器基础详解
Mar 09 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
Java文件与类动手动脑实例详解
Nov 10 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
python 网络编程要点总结
Jun 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的面试题集
2006/11/19 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python 文件操作删除某行的实例
2017/09/04 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
简单的大学生自我鉴定
2014/02/18 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
主要负责人任命书
2014/06/06 职场文书
市场营销策划方案
2014/06/11 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
老人与海读书笔记
2015/06/26 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL