Python:尝试将流拆分为一口大小的块
Python: Trying to split instream into bit sized chunks
目前我正在读取一个 instream 并将其拼接成 3 个字节的块:
instream_chunks = [instream[i:i+3]for i in range (0, len(instream), 3)]
我没有做的是将这个 instream 分成 22 位大小的块。在 Python 中有没有办法做到这一点?
编辑:插入流是这样创建的(用于测试目的):
instream = open('C:/xxx/test.txt', 'rb+')
然后这个 instream 被用在这个函数中
def write(self, instream: typ.BinaryIO):
从我上面描述的内容开始。
假设您有足够的内存,您可以将 instream 转换为位列表,然后根据需要对其进行切片。
def access_bit(data, num):
base = int(num/8)
shift = num % 8
return (data[base] & (1<<shift)) >> shift
def to_bits(instream):
ba = bytearray(instream.read())
return [access_bit(ba,i) for i in range(len(ba)*8)]
>>>to_bits(open('test.txt','rb'))
[0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0]
否则,您将不得不读取所需大小倍数的较小块,然后对每个块使用上述方法。例如,您读取 22*4 = 88 位或 11 个字节,然后对其调用 to_bits,将结果数组拆分为 4 个 22 位块,然后重复。
目前我正在读取一个 instream 并将其拼接成 3 个字节的块:
instream_chunks = [instream[i:i+3]for i in range (0, len(instream), 3)]
我没有做的是将这个 instream 分成 22 位大小的块。在 Python 中有没有办法做到这一点?
编辑:插入流是这样创建的(用于测试目的):
instream = open('C:/xxx/test.txt', 'rb+')
然后这个 instream 被用在这个函数中
def write(self, instream: typ.BinaryIO):
从我上面描述的内容开始。
假设您有足够的内存,您可以将 instream 转换为位列表,然后根据需要对其进行切片。
def access_bit(data, num):
base = int(num/8)
shift = num % 8
return (data[base] & (1<<shift)) >> shift
def to_bits(instream):
ba = bytearray(instream.read())
return [access_bit(ba,i) for i in range(len(ba)*8)]
>>>to_bits(open('test.txt','rb'))
[0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0]
否则,您将不得不读取所需大小倍数的较小块,然后对每个块使用上述方法。例如,您读取 22*4 = 88 位或 11 个字节,然后对其调用 to_bits,将结果数组拆分为 4 个 22 位块,然后重复。