2017-03-06 4 views
0

Ich habe diese eine Liste von Byte-Strings in einen String drehen, über die Github API, nach Base64-Decodierung:Wie in Python3

[b'<!DOCTYPE html>\n', b'<html>\n', b' <head>\n'] 

Und ich würde wirklich wie ein String (mit \n Zeilenenden) oder eine Liste von Strings.

verbrachte ich eine Stunde jagen TypeError: a bytes-like object is required, not 'str', weil ich es bereits eine Liste von Strings gedacht war, und meine eigenen Lambda/Filter Fähigkeiten in Frage zu stellen, bevor ich die Ursache war irgendwo anders realisiert. Ich habe versucht zu googeln, aber ich bekomme nur Treffer für 'Python-Bytes zu string', was anders ist.

+0

Wie unterscheidet sich "Python Bytes zu String"? – tripleee

Antwort

1

Sie könnten nur map die bytes.decode Methode zu jedem Element und dann join es, wenn Sie einen einzelnen String benötigen:

l = [b'<!DOCTYPE html>\n', b'<html>\n', b' <head>\n'] 
s = "".join(map(bytes.decode, l)) 

oder rufen decode auf jedem Element in einer Liste-comp, wenn Sie eine Liste benötigen:

ls = [i.decode() for i in l] 

Mit den Ergebnissen nun sein:

>>> print(repr(s)) # repr to show \n 
'<!DOCTYPE html>\n<html>\n <head>\n' 
>>> print(ls) 
['<!DOCTYPE html>\n', '<html>\n', ' <head>\n'] 
+0

Danke. Ich kann mir nicht helfen, aber frage mich, ob die Fehlermeldung für 'TypeError: ein Byte-ähnliches Objekt benötigt wird, nicht str 'könnte hilfreicher für Noobs sein –