Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3字节格式_Python_Python 3.x_String Formatting - Fatal编程技术网

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()具有速度优势:另一种方法是: "{

在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).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