# Python 字符串格式化
> 原文: [https://thepythonguru.com/python-string-formatting](https://thepythonguru.com/python-string-formatting)
* * *
于 2020 年 1 月 7 日更新
* * *
`format()`方法允许您以任何所需的方式格式化字符串。
**语法**: `template.format(p1, p1, .... , k1=v1, k2=v2)`
模板是一个包含格式代码的字符串,`format()`方法使用它的参数替换每个格式代码的值。 例如:
```py
>>> 'Sam has {0} red balls and {1} yellow balls'.format(12, 31)
```
`{0}`和`{1}`是格式代码。 格式代码`{0}`替换为`format()`的第一个参数,即`12`,而`{1}`替换为`format()`的第二个参数,即`31`。
**预期输出**:
```py
Sam has 12 red balls and 31 yellow balls
```
对于简单的格式化,该技术是可以的,但是如果要在浮点数中指定精度怎么办? 对于这种情况,您需要了解有关格式代码的更多信息。 这是格式代码的完整语法。
**语法**: `{[argument_index_or_keyword]:[width][.precision][type]}`
`type`可以与格式代码一起使用:
| 格式码 | 描述 |
| --- | --- |
| `d` | 用于整数 |
| `f` | 用于浮点数 |
| `b` | 用于二进制数 |
| `o` | 八进制数 |
| `x` | 八进制十六进制数 |
| `s` | 用于字符串 |
| `e` | 用于指数格式的浮点 |
以下示例将使事情更加清楚。
**示例 1**:
```py
>>> "Floating point {0:.2f}".format(345.7916732)
```
在这里,我们指定精度的`2`位,`f`用于表示浮点数。
**预期输出**:
```py
Floating point 345.79
```
**示例 2**:
```py
>>> import math
>>> "Floating point {0:10.3f}".format(math.pi)
```
在这里,我们指定`3`精度数字,`10`表示宽度,`f`表示浮点数。
**预期输出**:
```py
Floating point 3.142
```
**示例 3**:
```py
"Floating point pi = {0:.3f}, with {1:d} digit precision".format(math.pi, 3)
```
这里`{1:d}`中的`d`表示整数值。
**预期输出**:
```py
Floating point pi = 3.142, with 3 digit precision
```
如果为整数`ValueError`指定精度,则仅在浮点数的情况下才需要指定精度。
**示例 5**:
```py
'Sam has {1:d} red balls and {0:d} yellow balls'.format(12, 31)
```
**预期输出**:
```py
Sam has 31 red balls and 12 yellow balls
```
**示例 6**:
```py
"In binary 4 is {0:b}".format(4) # b for binary, refer to Fig 1.1
```
**预期输出**:
```py
In binary 4 is 100
```
**示例 7**:
```py
array = [34, 66, 12]
"A = {0}, B = {1}, C = {2}".format(*array)
```
**预期输出**:
```py
A = 34, B = 66, C = 12
```
**示例 8**:
```py
d = {
'hats' : 122,
'mats' : 42
}
"Sam had {hats} hats and {mats} mats".format(**d)
```
**预期输出**:
```py
Sam had 122 hats and 42 mats
```
`format()`方法还支持关键字参数。
```py
'Sam has {red} red balls and {green} yellow balls'.format(red = 12, green = 31)
```
请注意,在使用关键字参数时,我们需要在`{}`内部使用参数,而不是数字索引。
您还可以将位置参数与关键字参数混合
```py
'Sam has {red} red balls, {green} yellow balls \
and {0} bats'.format(3, red = 12, green = 31)
```
格式化字符串的`format()`方法是一个非常新的方法,它是在 Python 2.6 中引入的。 您将在旧版代码中看到另一种古老的技术,它允许您使用`%`运算符而不是`format()`方法来格式化字符串。
让我们举个例子。
```py
"%d pens cost = %.2f" % (12, 150.87612)
```
在这里,我们使用`%`左侧的模板字符串。 我们使用`%`代替格式代码的`{}`。 在`%`的右侧,我们使用元组包含我们的值。 `%d`和`%.2f`被称为格式说明符,它们以`%`开头,后跟代表数据类型的字符。 例如,`%d`格式说明符是整数的占位符,类似地`%.2f`是浮点数的占位符。
因此,`%d`被替换为元组的第一值,即`12`,而`%.2f`被替换为第二值,即`150.87612`。
**预期输出**:
```py
12 pens cost = 150.88
```
一些更多的例子。
**示例 1**:
新:
```py
"{0:d} {1:d} ".format(12, 31)
```
旧:
```py
"%d %d" % (12, 31)
```
**预期输出**:
```py
12 31
```
**示例 2**:
New:
```py
"{0:.2f} {1:.3f}".format(12.3152, 89.65431)
```
Old:
```py
"%.2f %.3f" % (12.3152, 89.65431)
```
**预期输出**:
```py
12.32 89.654
```
**示例 3**:
New:
```py
"{0:s} {1:o} {2:.2f} {3:d}".format("Hello", 71, 45836.12589, 45 )
```
Old:
```py
"%s %o %.2f %d" % ("Hello", 71, 45836.12589, 45 )
```
**预期输出**:
```py
Hello 107 45836.13 45
```
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象