如何从Python中的十六进制字符串中删除'\x'?

Abr*_*ham 4 python string wave python-2.7 python-3.x

我正在wav使用 module.Python 读取音频文件wave。该库中的函数readframe()以十六进制字符串形式返回帧。我想删除\x这个字符串,但translate()函数无法按我想要的方式工作:

>>> input = wave.open(r"G:\Workspace\wav\1.wav",'r')
>>> input.readframes (1)
'\xff\x1f\x00\xe8'
>>> '\xff\x1f\x00\xe8'.translate(None,'\\x')
'\xff\x1f\x00\xe8'
>>> '\xff\x1f\x00\xe8'.translate(None,'\x')
ValueError: invalid \x escape
>>> '\xff\x1f\x00\xe8'.translate(None,r'\x')
'\xff\x1f\x00\xe8'
>>> 
Run Code Online (Sandbox Code Playgroud)

无论如何,我想将结果值除以 2,然后\x再次相加并生成包含这些新值的新wav文件。有人有更好的主意吗?

怎么了?

And*_*ini 5

做你想做的事情的一种方法是:

>>> s = '\xff\x1f\x00\xe8'
>>> ''.join('%02x' % ord(c) for c in s)
'ff1f00e8'
Run Code Online (Sandbox Code Playgroud)

translate不起作用的原因是您看到的不是字符串本身,而是它的表示形式。换句话说,\x不包含在字符串中:

>>> '\\x' in '\xff\x1f\x00\xe8'
False
Run Code Online (Sandbox Code Playgroud)

\xff\x1f\x00\xe8是 for 字符的十六进制表示(实际上是 ,len(s) == 4而不是24)。


Dmi*_*try 5

事实上,你的字符串中没有反斜杠。所以,这就是为什么你无法删除它们。

如果您尝试使用该字符串中的每个十六进制字符(使用ord()len()函数 - 您将看到它们的实际值。此外,字符串的长度仅为 4,而不是 16。

您可以使用多种解决方案来实现您的结果:“十六进制”编码:

'\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
Run Code Online (Sandbox Code Playgroud)

或者使用repr()函数:

repr('\xff\x1f\x00\xe8').translate(None,r'\\x')
Run Code Online (Sandbox Code Playgroud)

  • 反向: `'ff1f00e8'.decode('hex')` :) 长度怎么样 - 在初始字符串中使用反斜杠。 (3认同)