如何从 Python 中的十六进制字符串中删除 '\x'?
How to remove '\x' from a hex string in Python?
我正在使用 wave
模块读取 Python 中的 wav
音频文件。此库中的 readframe()
函数 returns 帧为十六进制字符串。我想删除此字符串的 \x
,但 translate()
函数无法正常工作:
>>> input = wave.open(r"G:\Workspace\wav.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'
>>>
我想以任何方式将结果值除以 2,然后再次添加 \x
并生成一个包含这些新值的新 wav
文件。有人有更好的主意吗?
怎么了?
做你想做的一种方法是:
>>> s = '\xff\x1f\x00\xe8'
>>> ''.join('%02x' % ord(c) for c in s)
'ff1f00e8'
translate
不起作用的原因是您看到的不是字符串本身,而是它的表示形式。换句话说,\x
不包含在字符串中:
>>> '\x' in '\xff\x1f\x00\xe8'
False
\xff
、\x1f
、\x00
和\xe8
是for字符的十六进制表示(其实是len(s) == 4
,不是24
).
使用编码方式:
>>> s = '\xff\x1f\x00\xe8'
>>> print s.encode("hex")
'ff1f00e8'
因为这是十六进制表示,编码 与 hex
>>> '\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
确实,您的字符串中没有反斜杠。所以,这就是为什么你不能删除它们。
如果您尝试使用此字符串中的每个十六进制字符(使用 ord()
和 len()
函数 - 您将看到它们的真实值。此外,您的字符串的长度仅为 4 , 不是 16.
您可以尝试多种解决方案来实现您的结果:
'hex'编码:
'\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
或使用repr()
函数:
repr('\xff\x1f\x00\xe8').translate(None,r'\x')
我正在使用 wave
模块读取 Python 中的 wav
音频文件。此库中的 readframe()
函数 returns 帧为十六进制字符串。我想删除此字符串的 \x
,但 translate()
函数无法正常工作:
>>> input = wave.open(r"G:\Workspace\wav.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'
>>>
我想以任何方式将结果值除以 2,然后再次添加 \x
并生成一个包含这些新值的新 wav
文件。有人有更好的主意吗?
怎么了?
做你想做的一种方法是:
>>> s = '\xff\x1f\x00\xe8'
>>> ''.join('%02x' % ord(c) for c in s)
'ff1f00e8'
translate
不起作用的原因是您看到的不是字符串本身,而是它的表示形式。换句话说,\x
不包含在字符串中:
>>> '\x' in '\xff\x1f\x00\xe8'
False
\xff
、\x1f
、\x00
和\xe8
是for字符的十六进制表示(其实是len(s) == 4
,不是24
).
使用编码方式:
>>> s = '\xff\x1f\x00\xe8'
>>> print s.encode("hex")
'ff1f00e8'
因为这是十六进制表示,编码 与 hex
>>> '\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
确实,您的字符串中没有反斜杠。所以,这就是为什么你不能删除它们。
如果您尝试使用此字符串中的每个十六进制字符(使用 ord()
和 len()
函数 - 您将看到它们的真实值。此外,您的字符串的长度仅为 4 , 不是 16.
您可以尝试多种解决方案来实现您的结果: 'hex'编码:
'\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
或使用repr()
函数:
repr('\xff\x1f\x00\xe8').translate(None,r'\x')