Python格式化字符串

字符串和Unicode对象有一个独特的内置操作:%(取模)操作符。这也被称为字符串格式化插值操作符。给出format % values(其中format是字符串或Unicode对象),转换规范format中的%转换说明被替换为values的零个或多个元素。效果类似于C语言中使用的sprintf()如果format是一个Unicode对象,或者正在使用进行转换的任何对象是Unicode对象,结果也将是一个Unicode对象。

如果format需要一个单一的参数,values可以是一个单个的非元组对象。否则,values必须是一个元组且其元素个数与格式字符串指定的完全相同,或者是一个单一的映射对象(例如,一个字典)。

转换说明符包含两个或多个字符并具有以下组件,必须按以下顺序发生:

  1. '%'字符,它标记指示符的起点。
  2. 映射的键(可选),由圆括号括起来的字符序列组成(例如,(somename))。
  3. 转换的标志(可选),它们影响某些转换类型的结果。
  4. 字段最小的宽度(可选)。如果用'*'(星号)表示,则真正的宽度从元组values中下一个元素读取,字段最小宽度值后面的是将要转换的对象和可选的精度。
  5. 精度(可选),用'.'(点号)后面跟上精度给出。如果用'*'(星号)表示,真正的宽度从元组values中的下一个元素读取,精度后面的是将要转换的值。
  6. 长度调整器(可选)。
  7. 转换的类型。

当右侧参数是一个字典(或其它映射类型)时,那么字符串中的formats必须包含一个圆括号括起来的键,其来自于%字符后立即插入的那个字典。映射的键从映射中选择要格式化的值。举个例子:

>>> print '%(language)s has %(number)03d quote types.' % 
...       {"language": "Python", "number": 2}
Python has 002 quote types.

在这种情况下format中不可以出现*指示符(因为它们需要一个连续的参数列表)。

转换标志字符包括:

标志 含义
'#' The value conversion will use the “alternate form” (where defined below).
'0' The conversion will be zero padded for numeric values.
'-' The converted value is left adjusted (overrides the '0' conversion if both are given).
' ' (a space) A blank should be left before a positive number (or empty string) produced by a signed conversion.
'+' A sign character ('+' or '-') will precede the conversion (overrides a “space” flag).

可能存在长度修饰符(hlL),但将被忽略,因为它不是Python的必要条件——因此,%ld等同于%d

转换类型包括:

转换 含义
'd' 有符号的十进制整数。  
'i' 有符号的十进制整数。  
'o' 有符号的八进制值。 (1)
'u' 废弃的类型 – 与'd'完全一致。 (7)
'x' 有符号的十六进制数(小写)。 (2)
'X' 有符号的十六进制(大写)。 (2)
'e' 浮点数的指数形式(小写)。 (3)
'E' 浮点数的指数形式(大写)。 (3)
'f' 浮点数的十进制形式。 (3)
'F' 浮点数的十进制形式。 (3)
'g' 浮点数形式。如果指数小于-4或者不小于精度则使用小写的指数形式,否则使用十进制形式。 (4)
'G' 浮点数形式。如果指数小于-4或者不小于精度则使用大写的指数形式,否则使用十进制形式。 (4)
'c' 单个字符(接受整数或者单个字符的字符串)。  
'r' 字符串(使用repr()转换任何Python对象)。 (5)
's' 字符串(使用str()转换任意Python对象)。 (6)
'%' 不转换任何参数,结果中出现的是'%'字符。  

注:

  1. 替代形式造成一家领先的零 ('0') 左侧填充和格式设置的数字如果结果的前导字符之间插入已经不是零。

  2. 替代形式导致前导"0x""0x" (具体取决于是否使用了'x'或者'X'格式) 来插入左侧填充和格式的数量,如果前导字符的结果已经不是零之间。

  3. 替代形式使结果总是包含小数点,即使没有任何数字跟随它。

    精度决定小数点之后的有效位数,默认为6。

  4. 替代形式使结果总是包含小数点,和尾随零不因为他们否则将会被删除。

    精度决定小数点前后的有效位数,默认为6。

  5. %r转换在Python 2.0版中加入。

    精度决定使用的字符的最大数目。

  6. 如果对象或提供的格式是一个unicode字符串,生成的字符串也将是unicode

    精度决定使用的字符的最大数目。

  7. 请参阅 PEP 237

因为Python字符串有明确的长度,所以%s转换不会假定''是字符串的结束。

2.7版中的更改: %f转换绝对值大于1e50的数字不再用%g转换替换。

标准模块stringre中定义了其它的字符串操作。

如果引用本站的原创文章,请注明原文链接:,本站保留追究责任的权利!

发表评论