我想删除字符串中的一个空字节,有时用另一个字符替换它。 像那样:
string =“41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00”
我正在考虑使用随机和替换,但替换总是从第一个开始:
replace("00","B",1)
所以这不是随机的。
任何帮助将不胜感激!
编辑:我的意思是零到00,我犯了一个错误:
string =“41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00”
由于
答案 0 :(得分:7)
不仅如此,00
不是任何想象力的“空” - 它是一个2个字符的字符串。您似乎默默地假设您的字符串由两个十六进制数字的子串组成,并且您执行的任何字符串操作都不会知道您的这个小私有约定 - 如果您设法“替换随机00”它很可能是由“F0”的第二个数字组成的,然后是“03”的第一个数字:不是你可能的意思!
逻辑上更清晰的方法是首先将您的字符串拆分为2位数字,从而使您的未说出的假设明确而明确:
>>> string = "4100360036000000570046004200410061006200730020003600"
>>> pieces = [string[i:i+2] for i in range(0, len(string), 2)]
>>> pieces
['41', '00', '36', '00', '36', '00', '00', '00', '57', '00', '46', '00', '42', '00', '41', '00', '61', '00', '62', '00', '73', '00', '20', '00', '36', '00']
>>>
是的,这可以更简洁,但我在这里努力寻求清晰度和概念清晰度! - 。)。
现在找到所有'00'数字:
>>> where0s = [i for i in range(len(pieces)) if pieces[i] == '00']
>>> where0s
[1, 3, 5, 6, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
(同样,容易做到紧凑,但这是最清晰的方式; - )。
现在从where0s中随机选择并删除它,或者将其替换为“BA”,然后重新加入字符串:
>>> import random
>>> pickone = random.choice(where0s)
>>> pickone
25
>>> # if replacing:
...
>>> pieces[pickone] = 'BA'
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036BA'
>>> # if removing:
...
>>> del pieces[pickone]
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036'
>>>
如果这确实是你想要执行的确切操作,但是你想要更简洁和速度而不是这个完全清晰的清晰度,我们当然可以继续发展这个想法!
答案 1 :(得分:1)
在Python 3.1.1中测试的丑陋代码
import random
s = "a00b00c00d00e00f00g"
s1 = s.split("00")
i = random.randint(1,s.count("00"))
s2 = "00".join(s1[:i])
s3 = "00".join(s1[i:])
print (s2+"EE"+s3)
答案 2 :(得分:0)
此解决方案为字符串的偶数值抓取“00”的所有可能位置,并随机选择一个。它应该解决你的问题:
from random import choice
string = "4100360036000000570046004200410061006200730020003600"
zeroes = []
for i, s in enumerate(string):
if i % 2 == 0 and i < len(string) - 1 and string[i:i + 2] == "00":
zeroes.append(i)
c = choice(zeroes)
string = string[:c] + '0B' + string[c + 2:]
print string
答案 3 :(得分:0)
您无法替换字符串中的字节。相反,您希望为此使用数组。
import array
s = "4100360036000000570046004200410061006200730020003600"
a = array.array('c',s)
b = array.array('c',"B") # make a one character array containing B
print a
a[6] = b[0]
print b
当然,如果您希望这些是字符的十六进制代码,那么您需要使用hex()和chr()函数在整数和十六进制字符串之间进行转换。