详解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网络编程实例简析
Sep 26 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
Python实战购物车项目的实现参考
Feb 20 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
python flask安装和命令详解
Apr 02 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
Django 用户认证Auth组件的使用
Nov 30 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP中一个控制字符串输出的函数
2006/10/09 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
微信小程序收藏功能的实现代码
2020/06/19 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
wxPython学习之主框架实例
2014/09/28 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python语言中with as的用法使用详解
2018/02/23 Python
python实现五子棋游戏
2019/06/18 Python
python实现的config文件读写功能示例
2019/09/24 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python argparse模块使用方法解析
2020/02/20 Python
活动总结范文
2014/08/30 职场文书
就业推荐表院系意见
2015/06/05 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
bose降噪耳机音能消除人声吗
2022/04/19 数码科技
linux目录管理方法介绍
2022/06/01 Servers