繁体   English   中英

将Python中的二进制文件读入结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM