Home  >  Article  >  Backend Development  >  Python Full Stack Road Series String Formatting

Python Full Stack Road Series String Formatting

高洛峰
高洛峰Original
2017-02-09 10:42:201278browse

This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator.

String formats currently provided by Python There are two ways to format:

  • Percent mode

  • format mode

These two This method is applicable to both Python2 and Python3. The percent sign method has always been built-in in Python, and the format method has only come out recently.

Old style % formatting

  • Parameter format

%[(name)][flags][width].[precision]typecode
  • [(name) ]

Optional, used to select the specified key

  • [flags]

Optional, available values ​​are:

Value Description
+ right-aligned; positive numbers are preceded by exactly, negative numbers are preceded by a minus sign
- left Alignment; no sign before positive numbers, plus a minus sign before negative numbers
space Right alignment; add a space before positive numbers, plus a minus sign before negative numbers
0 Right-justified; no sign before positive numbers, and a minus sign before negative numbers; fill the blanks with 0
  • ##[width]

Optional, occupies width

  • .[precision ]

Optional, the number of digits to retain after the decimal point

  • typecode

Required, the parameters are as follows:

ValueDescriptionsGet the return value of the __str__ method of the incoming object and format it to the specified locationr Get the return value of the __repr__ method of the incoming object and format it to the specified locationcInteger: Convert the number to its unicode corresponding value , the decimal range is 0 <= i <= 1114111 (py27 only supports 0-255); characters: add characters to the specified position oConvert the integer to octal representation and format it to the specified location xConvert the integer to hexadecimal representation and format it Format to the specified locationdConvert integers and floating point numbers into decimal representation and format them to the specified locationeConvert integers and floating point numbers into scientific notation and format them to the specified position (lowercase e) E Convert integers and floating-point numbers into scientific notation and format them to the specified position (capital E) fConvert integers and floating-point numbers into floating-point numbers Represent and format it to the specified position (default to 6 decimal places)##FgG%


注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

格式化实例

  • 常用字符串格式化方式

 # %s 代表字符串
 >>> string = "My name is: %s" % ("ansheng")
 >>> string
'My name is: ansheng'<ul class=" list-paddingleft-2"><li><p>字符串中出现<code>%</code>号的次数要与<code>%</code>之后所提供的数据项个数相同,如果需要插入多个数据,则需要将他们封装进一个元组。</p></li></ul>
<pre class="brush:php;toolbar:false"> # %s是姓名,%d是年龄,必须是一个整数,不然会报错
 >>> string = "My name is: %s, I am %d years old" % ("anshen", 20)
 >>> string
'My name is: anshen, I am 20 years old'
  • 给参数起一个名字,后面传值的时候必须是一个字典

 # %(name)s是姓名,%(age)d是年龄,必须是一个整数,传入的值是一个字典格式
 >>> string = "My name is: %(name)s, I am %(age)d years old" % {"name":"anshen", "age":20}
 >>> string
'My name is: anshen, I am 20 years old'
  • 去浮点数后面的位数

 # %.2f小数后面只取两位
 >>> string = "percent %.2f" % 99.97623
 >>> string
'percent 99.98'
  • 给浮点数起一个名字(key)

 >>> string = "percent %(pp).2f" % {"pp":99.97623}
 >>> string
'percent 99.98'
  • 两个百分号代表一个百分号

 >>> string = "percent %(pp).2f%%" % {"pp":99.97623}
 >>> string
'percent 99.98%'

使用{}和format的新格式化

[[fill]align][sign][#][0][width][,][.precision][type]
  • [fill]

可选,空白处填充的字符

  • align

可选,对齐方式(需配合width使用)

Same as above
Automatic adjustment converts integers and floating-point numbers into floating-point or scientific notation (more than 6 digits use scientific notation), and formats them to the specified position (if it is scientific notation, it is e; )
Auto-adjustment converts integers and floating-point numbers into floating-point or scientific notation (use scientific notation for more than 6 digits), and converts them Format to the specified position (E if it is scientific notation;)
When there is a formatting flag in the string, you need to use %% to represent one Percent sign
参数 说明
<强制内容左对齐
> 强制内容右对齐(默认)
强制内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^ 强制内容居中
  • [sign]

可选,有无符号数字

参数 说明
+ 正号加正,负号加负
- 正号不变,负号加负
space 正号空格,负号加负
  • [#]

可选,对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

  • [,]

可选,为数字添加分隔符,如:1,000,000

  • [width]

可选,格式化位所占宽度

  • [.precision]

可选,小数位保留精度

  • [type]

可选,格式化类型

  • 传入” 字符串类型 “的参数

参数 说明
s 格式化字符串类型数据
空白 未指定类型,则默认是None,同s
  • 传入“ 整数类型 ”的参数

参数 说明
b 将10进制整数自动转换成2进制表示然后格式化
c 将10进制整数自动转换为其对应的unicode字符
d 十进制整数
o 将10进制整数自动转换成8进制表示然后格式化;
x 将10进制整数自动转换成16进制表示然后格式化(小写x)
X 将10进制整数自动转换成16进制表示然后格式化(大写X)
  • 传入“ 浮点型或小数类型 ”的参数

参数 说明
e 转换为科学计数法(小写e)表示,然后格式化;
E 转换为科学计数法(大写E)表示,然后格式化;
f 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
F 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
g 自动在e和f中切换
G 自动在E和F中切换
% 显示百分比(默认显示小数点后6位)

format格式化实例

  • 第一种基本format格式化方式

 >>> string = "My name is: {}, I am {} years old, {} Engineer".format("ansheng",20,"Python")
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 第二种基本format格式化方式

 >>> string = "My name is: {}, I am {} years old, {} Engineer".format(*["ansheng",20,"Python"])
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 给传入的参数加一个索引

 >>> string = "My name is: {0}, I am {1} years old, {0} Engineer".format(*["ansheng",20,"Python"])
 >>> string
'My name is: ansheng, I am 20 years old, ansheng Engineer'
  • 给参数起一个名字(key)

>>> string = "My name is: {name}, I am {age} years old, {job} Engineer".format(name="ansheng",age=20,job="Python")
>>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 字典的方式

 >>> string = "My name is: {name}, I am {age} years old, {job} Engineer".format(**{"name":"ansheng","age":20,"job":"Python"})
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 索引内的索引

 >>> string = "My name is: {0[0]}, I am {0[1]} years old, {0[2]} Engineer".format(["Ansheng",20,"Python"],["An",11,"IT"])
 >>> string
'My name is: Ansheng, I am 20 years old, Python Engineer'
  • 制定参数类型

 >>> string = "My name is: {:s}, I am {:d} years old, {:f} wage".format("Ansheng",20,66666.55)
 >>> string
'My name is: Ansheng, I am 20 years old, 66666.550000 wage'
  • 制定名称(key)的值类型

 >>> string = "My name is: {name:s}, I am {age:d} years old".format(name="Ansheng",age=20)
 >>> string
'My name is: Ansheng, I am 20 years old'
  • 异类实例

 >>> string = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
 >>> string
'numbers: 1111,17,15,f,F, 1587.623000%'
  • 索引

 >>> string = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
 >>> string
'numbers: 1111,17,15,f,F, 1500.000000%'

原文链接

This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator.

Python目前提供的字符串格式化方式有两种:

  • 百分号方式

  • format方式

这两种方式在Python2Python3中都适用,百分号方式是Python一直内置存在的,format方式为近期才出来的。

旧式%格式化

  • 参数格式

%[(name)][flags][width].[precision]typecode
  • [(name)]

可选,用于选择指定的key

  • [flags]

可选,可供选择的值有:

说明
+ 右对齐;正数前加正好,负数前加负号
- 左对齐;正数前无符号,负数前加负号
space 右对齐;正数前加空格,负数前加负号
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
  • [width]

可选,占有宽度

  • .[precision]

可选,小数点后保留的位数

  • typecode

必选,参数如下:

说明
s 获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r 获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o将整数转换成 八 进制表示,并将其格式化到指定位置
x将整数转换成十六进制表示,并将其格式化到指定位置
d将整数、浮点数转换成十进制表示,并将其格式化到指定位置
e将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F同上
g自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%当字符串中存在格式化标志时,需要用 %%表示一个百分号


注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

格式化实例

  • 常用字符串格式化方式

 # %s 代表字符串
 >>> string = "My name is: %s" % ("ansheng")
 >>> string
'My name is: ansheng'<ul class=" list-paddingleft-2"><li><p>字符串中出现<code>%</code>号的次数要与<code>%</code>之后所提供的数据项个数相同,如果需要插入多个数据,则需要将他们封装进一个元组。</p></li></ul>
<pre class="brush:php;toolbar:false"> # %s是姓名,%d是年龄,必须是一个整数,不然会报错
 >>> string = "My name is: %s, I am %d years old" % ("anshen", 20)
 >>> string
'My name is: anshen, I am 20 years old'
  • 给参数起一个名字,后面传值的时候必须是一个字典

 # %(name)s是姓名,%(age)d是年龄,必须是一个整数,传入的值是一个字典格式
 >>> string = "My name is: %(name)s, I am %(age)d years old" % {"name":"anshen", "age":20}
 >>> string
'My name is: anshen, I am 20 years old'
  • 去浮点数后面的位数

 # %.2f小数后面只取两位
 >>> string = "percent %.2f" % 99.97623
 >>> string
'percent 99.98'
  • 给浮点数起一个名字(key)

 >>> string = "percent %(pp).2f" % {"pp":99.97623}
 >>> string
'percent 99.98'
  • 两个百分号代表一个百分号

 >>> string = "percent %(pp).2f%%" % {"pp":99.97623}
 >>> string
'percent 99.98%'

使用{}和format的新格式化

[[fill]align][sign][#][0][width][,][.precision][type]
  • [fill]

可选,空白处填充的字符

  • align

可选,对齐方式(需配合width使用)

参数 说明
<强制内容左对齐
> 强制内容右对齐(默认)
强制内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^ 强制内容居中
  • [sign]

可选,有无符号数字

参数 说明
+ 正号加正,负号加负
- 正号不变,负号加负
space 正号空格,负号加负
  • [#]

可选,对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

  • [,]

可选,为数字添加分隔符,如:1,000,000

  • [width]

可选,格式化位所占宽度

  • [.precision]

可选,小数位保留精度

  • [type]

可选,格式化类型

  • 传入” 字符串类型 “的参数

参数 说明
s 格式化字符串类型数据
空白 未指定类型,则默认是None,同s
  • 传入“ 整数类型 ”的参数

参数 说明
b 将10进制整数自动转换成2进制表示然后格式化
c 将10进制整数自动转换为其对应的unicode字符
d 十进制整数
o 将10进制整数自动转换成8进制表示然后格式化;
x 将10进制整数自动转换成16进制表示然后格式化(小写x)
X 将10进制整数自动转换成16进制表示然后格式化(大写X)
  • 传入“ 浮点型或小数类型 ”的参数

参数 说明
e 转换为科学计数法(小写e)表示,然后格式化;
E 转换为科学计数法(大写E)表示,然后格式化;
f 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
F 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
g 自动在e和f中切换
G 自动在E和F中切换
% 显示百分比(默认显示小数点后6位)

format格式化实例

  • 第一种基本format格式化方式

 >>> string = "My name is: {}, I am {} years old, {} Engineer".format("ansheng",20,"Python")
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 第二种基本format格式化方式

 >>> string = "My name is: {}, I am {} years old, {} Engineer".format(*["ansheng",20,"Python"])
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 给传入的参数加一个索引

 >>> string = "My name is: {0}, I am {1} years old, {0} Engineer".format(*["ansheng",20,"Python"])
 >>> string
'My name is: ansheng, I am 20 years old, ansheng Engineer'
  • 给参数起一个名字(key)

>>> string = "My name is: {name}, I am {age} years old, {job} Engineer".format(name="ansheng",age=20,job="Python")
>>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 字典的方式

 >>> string = "My name is: {name}, I am {age} years old, {job} Engineer".format(**{"name":"ansheng","age":20,"job":"Python"})
 >>> string
'My name is: ansheng, I am 20 years old, Python Engineer'
  • 索引内的索引

 >>> string = "My name is: {0[0]}, I am {0[1]} years old, {0[2]} Engineer".format(["Ansheng",20,"Python"],["An",11,"IT"])
 >>> string
'My name is: Ansheng, I am 20 years old, Python Engineer'
  • 制定参数类型

 >>> string = "My name is: {:s}, I am {:d} years old, {:f} wage".format("Ansheng",20,66666.55)
 >>> string
'My name is: Ansheng, I am 20 years old, 66666.550000 wage'
  • 制定名称(key)的值类型

 >>> string = "My name is: {name:s}, I am {age:d} years old".format(name="Ansheng",age=20)
 >>> string
'My name is: Ansheng, I am 20 years old'
  • 异类实例

 >>> string = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
 >>> string
'numbers: 1111,17,15,f,F, 1587.623000%'
  • 索引

 >>> string = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
 >>> string
'numbers: 1111,17,15,f,F, 1500.000000%'

更多Python全栈之路系列之字符串格式化 相关文章请关注PHP中文网!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn