详解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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python实现查询苹果手机维修进度
Mar 16 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python爬取淘宝商品详情页数据
Feb 23 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python文字转语音的实例代码分析
Nov 12 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
python中pivot()函数基础知识点
Jan 03 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php微信开发之关注事件
2018/06/14 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
使用angular写一个hello world
2015/01/23 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
python 性能优化方法小结
2017/03/31 Python
Python实现针对中文排序的方法
2017/05/09 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
python 实现图片批量压缩的示例
2020/12/18 Python
内容编辑个人求职信
2013/12/10 职场文书
厕所文明标语
2014/06/11 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫