2016-12-13 2 views
0

ich eine Liste von Bytes Strings haben, die ich für Format in eine andere Zeichenfolge versuchen, die wiederum ich Bytes konvertieren, sieht etwa wie folgt aus:Formatierung Bytes Zeichenfolge in eine andere Byte-String

byte_string = b'text' 
fmt = 'this is the text: %s' 
fmt_string = bytes(fmt % byte_string, 'utf-8') 

aber wenn ich drucken fmt_string ich erhalte diese

b"this is the text: b'text'"

ich weiß, dass ich in python3.5 dies tun können:

b'this is the text: %s' % b'text' 

und r eceive:

b'this is the text: text'

gibt es eine Möglichkeit, das gleiche mit python3.4 zu tun?

Antwort

1

Sie können keine Formatierung für bytes Objekte in Python 3.4 oder niedriger verwenden. Ihre Optionen sind ein Upgrade auf 3.5 oder neuer oder keine Formatierung für Bytes. In Python 3.5 und höher müssen Sie fmt ein Byte-Objekt machen; Sie hätte gerne ein Byte wörtlichen verwenden, und wenden Sie die % Betreiber dass:

fmt = b'this is the text: %s' 
fmt_string = fmt % byte_string 

Alternativ kodieren die Vorlage erste, dann die Werte gelten:

fmt = 'this is the text: %s' 
fmt_string = bytes(fmt, 'utf-8') % byte_string 

Wenn Sie ein Upgrade nicht ist eine Option, aber Ihre Bytes Werte haben eine konsistente Codierung, zuerst dekodieren, dann erneut zu kodieren:

Wenn Sie nicht Ihre bytes Werte entschlüsseln, dann ist die einzige verbleibende Option bytes Objekte verketten:

fmt = b'this is the text: ' # no placeholder 
fmt_string = fmt + byte_string 

Diese mehrere Teile benötigen, wenn Text nach den Platzhalter, natürlich ist.

+2

python3.4 lässt Sie nicht in Byte-Objekte formatieren: 'fmt = b'der Text ist:% s 'fmt% b'text' ---------------- -------------------------------------------------- --------- Typeerror Traceback (jüngste Aufforderung zuletzt) ​​ in () ----> 1 fmt% b'text‘ Typeerror: nicht unterstützt Operandentyp (en) für%: 'Bytes' und 'Bytes'' – CforLinux

+1

Oh Krümel. In diesem Fall haben Sie die Möglichkeit, Grad bis 3,5 zu verwenden oder Format und Wert zu decodieren, zu interpolieren, dann erneut zu codieren oder Formatierung nicht zu verwenden (stattdessen Verkettung verwenden). –

Verwandte Themen