How to remove '\x' from a hex string in Python?

那年仲夏 提交于 2019-12-13 14:16:56

问题


I'm reading a wav audio file in Python using wave module. The readframe() function in this library returns frames as hex string. I want to remove \x of this string, but translate() function doesn't work as I want:

>>> 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'
>>> 

Any way I want divide the result values by 2 and then add \x again and generate a new wav file containing these new values. Does any one have any better idea?

What's wrong?


回答1:


Indeed, you don't have backslashes in your string. So, that's why you can't remove them.

If you try to play with each hex character from this string (using ord() and len() functions - you'll see their real values. Besides, the length of your string is just 4, not 16.

You can play with several solutions to achieve your result: 'hex' encode:

'\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'

Or use repr() function:

repr('\xff\x1f\x00\xe8').translate(None,r'\\x')



回答2:


One way to do what you want is:

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

The reason why translate is not working is that what you are seeing is not the string itself, but its representation. In other words, \x is not contained in the string:

>>> '\\x' in '\xff\x1f\x00\xe8'
False

\xff, \x1f, \x00 and \xe8 are the hexadecimal representation of for characters (in fact, len(s) == 4, not 24).




回答3:


Use the encode method:

>>> s = '\xff\x1f\x00\xe8'
>>> print s.encode("hex")
'ff1f00e8'



回答4:


As this is a hexadecimal representation, encode with hex

>>> '\xff\x1f\x00\xe8'.encode('hex')
'ff1f00e8'


来源:https://stackoverflow.com/questions/33707954/how-to-remove-x-from-a-hex-string-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!