我有一個文件,其中一些行是元數據,我可以忽略,一些行是struct.pack調用的打印結果。再說說f.txt是:當我的字符串長度正確時,爲什麼struct.unpack()會引發異常?
key: 3175
\x00\x00\x00\x00\x00\x00\x00\x00
key: 3266
\x00\x00\x00\x00\x00\x00\x00\x00
在這種情況下,該行開始的「鑰匙」是元數據和字節字符串我想提取的值。同樣在這種情況下,兩個字節的字符串行用struct.pack('d',0)生成。下面的代碼是我想怎樣做:
import struct
for line in open('f.txt', 'r'):
# if not metadata, remove newline character and unpack
if line[0:3] != 'key':
val = struct.unpack('d', line[0:-1])
appendToList(val) # do something else with val
有了這個,我得到:「struct.error:解壓需要長度爲8的字符串參數」。
如果我們修改略有代碼:
import struct
for line in open('f.txt', 'r'):
# if not metadata, remove newline character and unpack
if line[0:3] != 'key': print line[:-1]
則如預期輸出:
\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00
如果我把字節串直接進入解壓電話以後,我就成功:
import struct
# successful unpacking
struct.unpack('d', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
我已經嘗試傳遞以下變化的行來解壓,所有這些都給出了相同的r esult:
str(line)
repr(line)
b"%s" % line
確實錯誤沒有在文件的最後一行發生,這可能是缺少一個換行符? – vanza 2012-04-19 02:18:02
解包的第一個電話不成功,所以情況並非如此。 – arbenson 2012-04-19 02:37:47