web-dev-qa-db-fra.com

Python formatage de 3 octets

En Python 3, on peut formater une chaîne comme:

"{0}, {1}, {2}".format(1, 2, 3)

Mais comment formater les octets?

b"{0}, {1}, {2}".format(1, 2, 3)

soulève AttributeError: 'bytes' object has no attribute 'format'.

S'il n'y a pas de méthode format pour les octets, comment faire le formatage ou la "réécriture" des octets?

44
Ecir Hana

Et à partir de 3,5 % le formatage fonctionnera également pour bytes!

https://mail.python.org/pipermail/python-dev/2014-March/133621.html

35
Ecir Hana

Une autre façon serait:

"{0}, {1}, {2}".format(1, 2, 3).encode()

Testé sur IPython 1.1.0 & Python 3.2.3

13
Schcriher

Fait intéressant, .format() ne semble pas être pris en charge pour les séquences d'octets; comme vous l'avez démontré.

Vous pouvez utiliser .join() comme suggéré ici: http://bugs.python.org/issue3982

b", ".join([b'1', b'2', b'3'])

Il y a un avantage de vitesse associé à .join() par rapport à l'utilisation de .format() montré par le BDFL lui-même: http://bugs.python.org/msg180449

11
bernie

J'ai trouvé que le% a fonctionnait mieux dans Python 3.6.2, il devrait fonctionner à la fois pour b "" et "":

print(b"Some stuff %b. Some other stuff" % my_byte_or_unicode_string)
3
ivan_bilan