我有一些可用的二进制数据的文件,例如“0100010000101111101101001011010000101110111101111110111110111111111000000000001”,我想将11转换为01,例如如果它是01,则将是01 , 如果 011 则为 001, 如果 0111 则为 0001, 01111将是00001,所以转换后我的上述数据将是“0100010000100000100101001001010000100010000100000010000010000000001000000000001”我多次使用查找和替换方法,有人可以指导我如何使用正则表达式在一个代码中做到这一点或者if else语句,我刚刚开始学习python,
fin = open("1.txt", "rt")
data = fin.read()
data = data.replace('011', '001')
fin.close()
fin = open("2.txt", "wt")
fin.write(data)
fin.close()
os.remove('1.txt')
fin = open("2.txt", "rt")
data = fin.read()
data = data.replace('011', '001')
fin.close()
fin = open("1.txt", "wt")
fin.write(data)
fin.close()
os.remove('2.txt')
有人可以指导我如何使用正则表达式或 if else 语句在一个代码中做到这一点,
使用按位运算符实现此目的的方法:
dataFormat = f'0{len(data)}b'
value = int(data, 2)
result = f'{value ^ (value << 1) & value:{dataFormat}}'
详情:
首先,我们对左移值应用异或运算符。目标是删除序列中除最后一个之外的所有 1。
0100010000101111101101001011010000101110111101111110111110111111111000000000001
XOR 01000100001011111011010010110100001011101111011111101111101111111110000000000010
---------------------------------------------------------------------------------------
= 01100110001110000110111011101110001110011000110000011000011000000001000000000011
效果很好,但现在 1 序列(原始值)左边的每个 0 都变成了 1。
要解决这个问题,您只需与原始值应用 AND 运算符即可:
01100110001110000110111011101110001110011000110000011000011000000001000000000011
AND 0100010000101111101101001011010000101110111101111110111110111111111000000000001
---------------------------------------------------------------------------------------
= 0100010000100000100101001001010000100010000100000010000010000000001000000000001