我有一个文件,其中一些行是元数据,我可以忽略,一些行是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