Wie bekomme ich '\ x' aus einem Hex-String in Python?

Ich lese eine wav Audiodatei in Python mit wave . Die Funktion readframe() in dieser Bibliothek gibt Frames als Hex-String zurück. Ich möchte \x dieser Zeichenfolge entfernen, aber translate() Funktion funktioniert nicht wie ich will:

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

Auf irgendeine Weise möchte ich die Ergebniswerte mit 2 teilen und dann noch \x hinzufügen und eine neue wav Datei mit diesen neuen Werten generieren. Hat jemand eine bessere Idee?

Was ist los mit dir?

4 Solutions collect form web for “Wie bekomme ich '\ x' aus einem Hex-String in Python?”

In der Tat haben Sie keine Backslashs in Ihrem String. Also, deshalb kannst du sie nicht entfernen.

Wenn Sie versuchen, mit jedem Hex-Zeichen aus dieser Zeichenfolge zu spielen (mit ord() und len() Funktionen – sehen Sie ihre echten Werte. Außerdem ist die Länge Ihrer Saite nur 4, nicht 16.

Sie können mit mehreren Lösungen spielen, um Ihr Ergebnis zu erzielen: 'hex' encode:

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

Oder repr() Funktion:

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

Eine Möglichkeit zu tun, was Sie wollen, ist:

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

Der Grund, warum translate ist nicht funktioniert ist, dass das, was Sie sehen, ist nicht die Zeichenfolge selbst, sondern seine Darstellung. Mit anderen Worten, \x ist nicht in der Zeichenfolge enthalten:

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

\xff , \x1f , \x00 und \xe8 sind die hexadezimale Darstellung von Zeichen (in der Tat len(s) == 4 , nicht 24 ).

Verwenden Sie die Codierungsmethode:

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

Da dies eine hexadezimale Darstellung ist, kodiere mit hex

 >>> '\xff\x1f\x00\xe8'.encode('hex') 'ff1f00e8' 
Python ist die beste Programmiersprache der Welt.