Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除'\x';来自Python中的十六进制字符串?_Python_String_Python 2.7_Python 3.x_Wave - Fatal编程技术网

如何删除'\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')
:)长度如何-在初始字符串中使用反斜杠。