【问题标题】:Read binary file with header using bitarray's from file in Python在Python中使用bitarray从文件中读取带有标题的二进制文件
【发布时间】:2012-08-11 06:02:22
【问题描述】:

我编写了一个程序,它使用 bitarray 0.8.0 将位写入二进制文件。我想在这个二进制文件中添加一个标题来描述文件里面的内容。

我的问题是我认为bitarray的“fromfile”方法必须从头开始读取文件。我可以做一个解决方法,以便读取程序获取标题,然后重写一个仅包含二进制部分的临时文件(bitarray tofile),但这听起来不太有效。

有什么方法可以正确地做到这一点吗?

我的文件可能如下所示,其中明文是标题,二进制数据是位数组信息:

...{(0, 0): '0'}{(0, 0): '0'}{(0, 0): '0'}������������ ������������������������������������������������������ ������������������������������������������������������ ������������������������������������������������������ ������������������������������������������������������ ������������������������������������������������������ ������������������������������������������������������ ����������...

编辑:

我在阅读回复后尝试了以下操作:

bits = ""
b = bitarray()
with open(Filename, 'rb') as file:
    #Get header
    byte = file.read(1)
    while byte != "":
        # read header
        byte = file.read(1)
    b.fromfile(file)
    print b.to01()
    print "len(b.to01())", len(b.to01())

长度为0,“to01()”的打印为空。 但是,标题的打印很好。

【问题讨论】:

    标签: python header bitarray


    【解决方案1】:

    我的问题是我认为bitarray的“fromfile”方法必须从头开始读取文件。

    这很可能是错误的;它与大多数其他文件读取例程一样,可能从文件中的当前位置开始,并在 EOF 处停止。

    编辑:

    来自文档:

    fromfile(f, [n])

    从文件对象 f 中读取 n 个字节并将它们附加到解释为机器值的位数组中。当 n 被省略时,在到达 EOF 之前读取尽可能多的字节。

    【讨论】:

    • >fromfile(f, [n]) 从文件对象 f 中读取 n 个字节并将它们附加到解释为机器值的位数组中。当 n 被省略时,在到达 EOF 之前读取尽可能多的字节。
    • 我同意你的看法。我只是想从文档中引用一段话来巩固你的观点。
    • @mgilson:很公平。我将编辑以包含适当的摘录。
    • 我刚刚做了一个快速测试,它似乎不起作用。读取标题后(不关闭缓冲区),我尝试了 b.fromfile(file) 并打印 b.to01()。打印是空的。我刚刚编辑了我的帖子,以便您了解我测试的代码。
    • 奇怪,在这里工作正常。奇怪的是,bitarray.fromfile() 不是一个类方法。
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2012-02-01
    相关资源
    最近更新 更多