详解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字符串替换示例
Apr 24 Python
python实现提取百度搜索结果的方法
May 19 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
深入浅出学习python装饰器
Sep 29 Python
python实现简易版计算器
Jun 22 Python
python 实现调用子文件下的模块方法
Dec 07 Python
Python实现DDos攻击实例详解
Feb 02 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
用python实现学生管理系统
Jul 24 Python
聊聊python中的异常嵌套
Sep 01 Python
python实现高效的遗传算法
Apr 07 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
德生PL660的电路分析和打磨
2021/03/02 无线电
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
vue自定义组件实现双向绑定
2021/01/13 Vue.js
Python实现的金山快盘的签到程序
2013/01/17 Python
python计算方程式根的方法
2015/05/07 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
使用Python来开发微信功能
2018/06/13 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
对Python函数设计规范详解
2019/07/19 Python
django最快程序开发流程详解
2019/07/19 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
python 实现IP子网计算
2021/02/18 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
《祁黄羊》教学反思
2016/02/20 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电