2017-03-06 1 views
0

J'ai cela, via l'API Github, après décodage base64:Comment transformer une liste d'octets-chaînes dans une chaîne en python3

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

Et je voudrais vraiment comme une corde (avec \n fins de ligne), ou une liste de chaînes.

J'ai passé une heure à courir TypeError: a bytes-like object is required, not 'str' parce que je pensais qu'il était déjà une liste de chaînes, et remettre en question mes propres compétences lambda/filtre avant que je réalise la cause était ailleurs. J'ai essayé le googling mais je n'ai que des hits pour 'python bytes to string' ce qui est différent.

+0

Comment "python bytes to string" est-il différent? – tripleee

Répondre

1

Vous pourriez juste map la méthode bytes.decode à chaque élément puis join si vous avez besoin d'une seule chaîne:

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

ou, appelez decode sur chaque élément dans une liste-échantillon si vous avez besoin d'une liste:

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

les résultats étant maintenant:

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

Merci. Je ne peux m'empêcher de me demander si le message d'erreur pour 'TypeError: un objet de type bytes est requis, pas str 'pourrait être plus utile pour noobs –