问题
In Python 3, one can format a string like:
"{0}, {1}, {2}".format(1, 2, 3)
But how to format bytes?
b"{0}, {1}, {2}".format(1, 2, 3)
raises AttributeError: 'bytes' object has no attribute 'format'
.
If there is no format
method for bytes, how to do the formatting or "rewriting" of bytes?
回答1:
And as of 3.5 %
formatting will work for bytes
, too!
https://mail.python.org/pipermail/python-dev/2014-March/133621.html
回答2:
Another way would be:
"{0}, {1}, {2}".format(1, 2, 3).encode()
Tested on IPython 1.1.0 & Python 3.2.3
回答3:
Interestingly .format()
doesn't appear to be supported for byte-sequences; as you have demonstrated.
You could use .join()
as suggested here: http://bugs.python.org/issue3982
b", ".join([b'1', b'2', b'3'])
There is a speed advantage associated with .join()
over using .format()
shown by the BDFL himself: http://bugs.python.org/msg180449
回答4:
I found the %b
working best in Python 3.6.2, it should work both for b"" and "":
print(b"Some stuff %b. Some other stuff" % my_byte_or_unicode_string)
来源:https://stackoverflow.com/questions/15710515/python-3-bytes-formatting