如何删除'\x';来自Python中的十六进制字符串?
我正在使用如何删除'\x';来自Python中的十六进制字符串?,python,string,python-2.7,python-3.x,wave,Python,String,Python 2.7,Python 3.x,Wave,我正在使用wave模块读取Python中的wav音频文件。此库中的readframe()函数将帧作为十六进制字符串返回。我想删除此字符串的\x,但translate()函数不能按我的要求工作: >>> input = wave.open(r"G:\Workspace\wav\1.wav",'r') >>> input.readframes (1) '\xff\x1f\x00\xe8' >>> '\xff\x1f\x00\xe8'.transl
wave
模块读取Python中的wav
音频文件。此库中的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'
>>>
我希望以任何方式将结果值除以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
是字符的十六进制表示形式(实际上,len=4
,而不是24
)。使用编码方法:
>>> s = '\xff\x1f\x00\xe8'
>>> print s.encode("hex")
'ff1f00e8'
由于这是十六进制表示,使用十六进制编码
>>> '\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
实际上,字符串中没有反斜杠。所以,这就是为什么你不能移除它们 如果您尝试使用此字符串中的每个十六进制字符(使用
ord()
和len()
函数),您将看到它们的实际值。此外,字符串的长度仅为4,而不是16
您可以使用多种解决方案来实现您的目标:
“十六进制”编码:
'\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'
或者使用repr()
函数:
repr('\xff\x1f\x00\xe8').translate(None,r'\\x')
它有任何反向方式吗?我的意思是如何将“ff1f00e8”再次转换为“\xff\x1f\x00\xe8”?任何解码功能?反向:
“ff1f00e8”。解码('hex')
:)长度如何-在初始字符串中使用反斜杠。