[英]Reading a binary file in Python into a struct
我如何去在Python打开二进制数据文件和回读值一个long
的时间,到一个结构。 我目前有这样的东西,但我认为这将继续覆盖idList
,我想附加到它idList
,所以最后得到一个文件中所有long
值的元组-
file = open(filename, "rb")
try:
bytes_read = file.read(struct.calcsize("=l"))
while bytes_read:
# Read 4 bytes(long integer)
idList = struct.unpack("=l", bytes_read)
bytes_read = file.read(struct.calcsize("=l"))
finally:
file.close()
最简单(python 2.6或更高版本):
import array
idlist = array.array('l')
with open(filename, "rb") as f:
while True:
try: idlist.fromfile(f, 2000)
except EOFError: break
idtuple = tuple(idlist)
元组是不可变的,所以它们不能被逐步建成:所以,你必须建立一个不同(可变)序列,然后调用tuple
就可以了底。 当然,如果您实际上不需要特定的元组,则可以节省最后一个代价高昂的步骤,并保留数组或列表等。 无论如何,建议避免践踏诸如file
类的内置名称;-)。
如果您必须将struct
模块用于由array
模块最好处理的工作(例如,由于下注),
idlist = [ ]
with open(filename, "rb") as f:
while True:
bytes_read = f.read(struct.calcsize("=l"))
if not bytes_read: break
oneid = struct.unpack("=l", bytes_read)[0]
idlist.append(oneid)
with
语句(将来也可以在2.5中使用导入形式)比旧的try / final在明晰和简洁方面更好。
更改
idList = struct.unpack("=l", bytes_read)
至
idList.append(struct.unpack("=l", bytes_read)[0])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.