详解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使用心得之获得github代码库列表
Jun 25 Python
python返回昨天日期的方法
May 13 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
Python3运算符常见用法分析
Feb 14 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Django中Aggregation聚合的基本使用方法
Jul 09 Python
python脚本第一行如何写
Aug 30 Python
Django解决frame拒绝问题的方法
Dec 18 Python
python语言中pandas字符串分割str.split()函数
Aug 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
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
Python字符串处理函数简明总结
2015/04/13 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
Python发展史及网络爬虫
2019/06/19 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
公益广告语集锦
2014/03/13 职场文书
党的群众路线学习材料
2014/05/16 职场文书
室内设计专业自荐信
2014/05/31 职场文书
校庆团日活动总结
2014/08/28 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
八达岭长城导游词
2015/01/30 职场文书
无房证明样本
2015/06/17 职场文书
2015选调生工作总结
2015/07/24 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js