将01字符串以二进制形式存储在文件中(python)

现有一字符串,内容由‘0’和‘1’构成,由于构成元素只有两种,所以每个元素可以只用一位二进制表示。而如果直接存储为文本则会额外占用很多空间。使用下面的方法可以将这种字符串以二进制形式存储在文件中。

1.写入

由于程序对文件的写入需要以字节为单位,也就是8位二进制,所以我们需要将字符串中的字节每8个字符处理并转换为一个字节,然后将最后不足8位的字符单独存储为二进制,并在二进制文件末尾额外使用一个字节表示最后一个字节中有效二进制的位数。

def to_bytes(data):    #data为字符串
    b = bytearray()      #使用bytearray存储转换结果
    end_length = len(data) % 8      #获取最后不足8位的长度
    for i in range(0, len(data) - end_length, 8):
        b.append(int(data[i:i + 8], 2))    #通过附加参数‘2’使用int函数处理8位字符串
    b.append(int(data[len(data) - end_length:len(data)], 2))     #写入最后不足8位的二进制
    b.append(int(bin(end_length), 2))   #写入最后字节有效二进制的长度
    return bytes(b)    #返回bytearray

函数的返回值可以直接调用二进制文件对象的write方法写入

bin_file = open(bin_file_name, mode='wb')
bin_file.write(to_bytes(01string))

2.读取

bin_file = open(bin_file_name, mode='rb')
bin_str=bin_file.read()
word_bin = format(int.from_bytes(bin_str, byteorder='big', signed=False),
                           '#0' + str(len(bin_str) * 8 + 2) + 'b')[2:]
end_length_bin = word_bin[len(word_bin) - 8:len(word_bin)]
end_length = int(end_length_bin, 2)
word_bin = word_bin[0:-8]
word_bin = word_bin[0:-8] + word_bin[len(word_bin) -end_length:len(word_bin)]

发表评论

您的电子邮箱地址不会被公开。