详解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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python异常处理知识点总结
Feb 18 Python
Django如何防止定时任务并发浅析
May 14 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
python next()和iter()函数原理解析
Feb 07 Python
浅谈keras中loss与val_loss的关系
Jun 22 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 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+javascript的日历控件
2009/11/19 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python多线程原理与用法详解
2018/08/20 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
大家检讨书5000字
2014/02/03 职场文书
日语专业求职信
2014/07/04 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
就业协议书样本
2014/08/20 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
Django使用echarts进行可视化展示的实践
2021/06/10 Python
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS