详解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 相关文章推荐
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
使用Python实现跳帧截取视频帧
May 31 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
python常用排序算法的实现代码
Nov 08 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
使用gunicorn部署django项目的问题
Dec 30 Python
如何在python中实现ECDSA你知道吗
Nov 23 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
大家未必知道的Js技巧收藏
2008/04/07 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
python处理json数据中的中文
2014/03/06 Python
Python Socket编程入门教程
2014/07/11 Python
python中split方法用法分析
2015/04/17 Python
python向图片里添加文字
2019/11/26 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python 发送get请求接口详解
2020/11/17 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
上级检查欢迎词
2014/01/18 职场文书
暑假学习心得体会
2014/09/02 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
python代码实现扫码关注公众号登录的实战
2021/11/01 Python