Python 3字节格式
在Python 3中,可以设置如下字符串的格式:Python 3字节格式,python,python-3.x,string-formatting,Python,Python 3.x,String Formatting,在Python 3中,可以设置如下字符串的格式: "{0}, {1}, {2}".format(1, 2, 3) 但是如何格式化字节呢 b"{0}, {1}, {2}".format(1, 2, 3) 引发属性错误:“字节”对象没有属性“格式” 如果没有字节的格式方法,如何格式化或“重写”字节?有趣的是.format()似乎不支持字节序列;正如你所展示的 您可以按照此处的建议使用.join(): 与使用BDFL自己显示的.format()相比,.join()具有速度优势:另一种方法是: "{
"{0}, {1}, {2}".format(1, 2, 3)
但是如何格式化字节呢
b"{0}, {1}, {2}".format(1, 2, 3)
引发属性错误:“字节”对象没有属性“格式”
如果没有字节的
格式
方法,如何格式化或“重写”字节?有趣的是.format()
似乎不支持字节序列;正如你所展示的
您可以按照此处的建议使用.join()
:
与使用BDFL自己显示的.format()
相比,.join()
具有速度优势:另一种方法是:
"{0}, {1}, {2}".format(1, 2, 3).encode()
在IPython 1.1.0和Python 3.2.3上测试,从3.5开始,
%
格式也适用于字节
我发现
%b
在Python 3.6.2中工作得最好,它应该同时适用于b“”和“”:
我发现这很管用
a = "{0}, {1}, {2}".format(1, 2, 3)
b = bytes(a, encoding="ascii")
>>> b
b'1, 2, 3'
对于Python 3.6+,您可以使用以下简洁的语法:
f'foo {bar}'.encode() # a byte string
谢谢BDFL的信息也是一个很好的发现。但是,这并不能解决浮点数的格式问题。除了
str(一些字节)。encode()
理解之外,是否还有其他方法是很有意思的。字节的.format()
方法似乎正在被纳入3.4+@bernie:中,但对象的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。如何处理字节和编码?@bernie:。好极了!我希望如此,因为这是格式化C字符串的方式,哈哈洛。他们首先放弃了2.x的功能,或者破坏了这些功能,然后将它们重新带回来。u''文本(但禁止使用ur!),字节字符串格式open()
默认情况下以特定于系统的编码打开-很好,在2.x中,如果与非ascii符号一起使用,则字符串代码会中断;在3.x中,由于“本地”编码是ascii代码页,因此,如果在windows机器上使用,则会用中断的代码替换字符串代码。首先打破兼容性,将一半的功能带回来,值得吗?这是否意味着%
不再计划被弃用?@JS。我想说“将%格式添加到字节和字节数组”(PEP 461)与“不赞成”相矛盾。@EcirHana同意。如果能看到“哦,是的,还记得我们在3.1中发布的弃用通知吗?好吧,有趣的故事….”更新。如果格式参数是字节,则此选项不起作用。当需要在Unicode不支持的流中插入硬字节码时,此选项不起作用。字节字符串应为%b
而不是%a
,否则包含“b”前缀。但在Python 2.7.16中不起作用,所以它不向后兼容。它不适用于unicode字符串。仅支持b“”。这在str
上进行格式化,而不是在字节上进行格式化。例如,如果bar
是bytes
对象,则不会给出预期的结果。或者,如果您想将非ASCII字节值放入格式字符串中。@当然,在各种情况下,我的解决方案都没有帮助,包括您提到的那个。但这并不能否定这样一个事实:当解决方案起作用时,还有剩余的案例,包括我遇到的一个。
a = "{0}, {1}, {2}".format(1, 2, 3)
b = bytes(a, encoding="ascii")
>>> b
b'1, 2, 3'
f'foo {bar}'.encode() # a byte string