詳解Python中的array陣列模組相關使用
阿新 • • 發佈:2019-02-03
初始化
array例項化可以提供一個引數來描述允許那種資料型別,還可以有一個初始的資料序列儲存在陣列中。
1 2 3 4 5 6 7 |
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)
|
陣列配置為包含一個位元組序列,用一個簡單的字串初始化。
1 2 3 4 5 |
>>> ================================ RESTART ================================ >>>
As string: This is the array.
As array : array('c', 'This is the array.')
As hex : 54686973206973207468652061727261792e
|
處理陣列
類似於其他python序列,可以採用同樣方式擴充套件和處理array。
1 2 3 4 5 6 7 8 9 |
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))
|
支援的操作包括分片,迭代以及向末尾增加元素。
1 2 3 4 5 6 7 |
>>> ================================ 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)]
|
陣列和檔案
可以使用高效讀/寫檔案的專用內建方法將陣列的內容寫入檔案或從檔案讀取陣列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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轉換整個陣列而無須迭代處理每個元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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中迴圈處理資料高效的多。
1 2 3 4 5 6 7 8 9 |
>>> ================================ 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
|