2011-12-11 15 views
3

一度に多くの数字をstruct.unpackことができます。:は、どのように私は例えば、私がファイルにパック整数の束を入れたい

for i in int_list: 
    fp.write(struct.pack('<I', i)) 

今、私はint_listにそれらを読みたいです。私はこれを行うことができましたが、効率が悪いようです:

data = fp.read() 
int_list = [] 
for i in xrange(0, len(data), 4): 
    int_list.append(struct.unpack('<I', data[i:i+4])[0]) 

もっと効率的な方法がありますか?

答えて

5

array.arrayこれは高速です。それに含まれる要素のタイプを指定することができます。整数の場合はいくつかありますが(マシンエンディアンでのみIIUCですが)、fromfileメソッドを使用してファイルから直接読み取ります。

+1

OPは、彼のデータはリトルエンディアン(<)32ビット(I)の整数であることを望んでいます。マシンがビッグエンディアンであるかどうかをテストする必要があります。もしそうなら、 'your_array.byteswap() ' –

15

あなたは両方の方向に、より効率的にそれを行うことができます。

>>> import struct 
>>> int_list = [0, 1, 258, 32768] 
>>> fmt = "<%dI" % len(int_list) 
>>> data = struct.pack(fmt, *int_list) 
>>> data 
'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x01\x00\x00\x00\x80\x00\x00' 
>>> # f.write(data) 
... # data = f.read() 
... 
>>> fmt = "<%dI" % (len(data) // 4) 
>>> new_list = list(struct.unpack(fmt, data)) 
>>> new_list 
[0, 1, 258, 32768] 
+1

+1を使ってより直接的に答えてください:) –

関連する問題