将bin文件的内容复制x次并保持有序

Duplicating contents of bin file x times and keeping in order

我正在尝试获取二进制文件并按顺序复制内容:

假设文件包含 101010101010101。我想通过 x(对于本例来说是 3)复制每一位并制作文件的副本,以便复制的文件和副本将读取为 111000111000111000111000111000111000111000111。

然后我也希望能够扭转这一局面。

我遇到的问题是如何读取每个元素,然后将该元素写入新文件 x 次。我可以复制文件,但不确定如何读取每个元素然后复制它

我不知道您是否已经尝试过,或者您的解决方案是否有任何问题。

但是假设您已经读取了您需要的文件并且已经将文件中的值赋给了一个变量,您可以这样做:

# Define the bit content
bit = '101010101010101'
# Number that will duplicate each bit
times = 3
# New bit content
new_bit = ''

# Loop through each char in bit
for b in bit:
    new_bit += b*times

# Reverse the new bit
reverse_new_bit = new_bit[::-1]

# Save output to a new file
file = open(r'file.txt', 'w')
file.write(new_bit)

你也可以把它改成一个函数,读取每个调用该函数的文件。

如果你print(new_bit):

111000111000111000111000111000111000111000111

如果您检查 new_bit 是否与您分享的示例 print('111000111000111000111000111000111000111000111' != new_bit) 不同:

False

如果你print(reverse_new_bit):

111000111000111000111000111000111000111000111

Note: binary files can only contain bytes. So the sequence length will always be divisible by 8

将二进制文件解析为1个字符串

with open(source, 'rb') as f:
    # read byte string, list it as bytes, map each byte to bin and then to string and exclude '0b' from string
    _bytes = list(map(lambda s: str(bin(s))[2:], list(f.read())))
for i in range(len(_bytes)):
    _bytes[i] = '0' * (8 - len(_bytes[i])) + _bytes[i]  # add leading zeros

byte_string = "".join(_bytes)

然后就做这样的事情

ans_string = "".join([i*3 for i in byte_string])

print(ans_string)

最后一部分所做的是遍历 byte_string 中的所有字符,将其乘以 3(形成一个包含 3 个字符的字符串)并使用列表理解创建这样的列表。然后这个列表被传递给连接每个三元组

的连接