我们一般使用模板以及相应替换规则将数据转换为更复杂的字符串。
案例说明:
假设有以下变量
In [1]: id = "IAD"
In [2]: location = "Dulles Intl Airport"
In [3]: max_temp = 32
In [4]: min_temp = 13
In [5]: precipitation = 0.4
我们想把他们拼装为类似 IAD : Dulles Intl Airport : 32 / 13 / 0.40
的形式。
操作步骤:
(1) 根据目标字符串的结构创建模板字符串,将所有数据项替换为{}
占位符。在每个占位符内,放置数据项的名称。
'{id} : {location} : {max_temp} / {min_temp} / {precipitation}'
(2)使用字符串的format()方法创建目标字符串。
In [14]: template = '{id}:{location}:{max_temp} / {min_temp} / {precipitation}'
In [15]: template.format(id=id,location=location,max_temp=max_temp,min_temp=min_temp,precipitation=precipitation)
Out[15]: 'IAD:Dulles Intl Airport:32 / 13 / 0.4'
(3)我们可以发现创建的目标字符串格式有些不太准确,其实模板字符串的数据项还可以添加数据类型标识。基本数据类型代码如下:
- s为字符串
- d为十进制数
- f为浮点数
添加类型代码后的模板字符串如下所示:
In [16]: template = '{id:s} : {location:s} : {max_temp:d} / {min_temp:d} / {precipitation:f}'
In [17]: template.format(id=id,location=location,max_temp=max_temp,min_temp=min_temp,precipitation=precipitation)
Out[17]: 'IAD : Dulles Intl Airport : 32 / 13 / 0.400000'
(4)长度信息不是必须的,在某些情况下,甚至不需要长度信息。然而,在本例中,长度信息确保每个消息具有一致的格式。长度信息添加在类型代码之前。对于字符串和十进制数字,长度信息的格式如19s或3d。对于浮点数,长度信息的格式如5.2f,该长度信息指定了两部分内容:总长度为5个字符,其中2个在小数点的右边。整个模板字符串如下所示。
In [20]: template = '{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} / {precipitation:5.2f}'
In [21]: template.format(id=id,location=location,max_temp=max_temp,min_temp=min_temp,precipitation=precipitation)
Out[21]: 'IAD : Dulles Intl Airport : 32 / 13 / 0.40'
扩展1:
我们通过模板字符串的format()方法按照名称提供所有变量。在某些情况下,可能需要使用变量构建一个字典对象。这时,可以使用format_map()方法:
In [22]: data = dict(id=id,location=location,max_temp=max_temp,min_temp=min_temp,precipitation=precipitation)
In [23]: data
Out[23]:
{'id': 'IAD',
'location': 'Dulles Intl Airport',
'max_temp': 32,
'min_temp': 13,
'precipitation': 0.4}
In [24]: template.format_map(data)
Out[24]: 'IAD : Dulles Intl Airport : 32 / 13 / 0.40'
扩展2:
内置的vars()函数可以构建一个所有局部变量的字典。
In [25]: template.format_map(vars())
Out[25]: 'IAD : Dulles Intl Airport : 32 / 13 / 0.40'
vars()函数可以便捷地自动构建字典。
字符串的format()方法和format_map()方法都可以组装相对复杂的字符串。
这些方法的基本功能是根据关键字参数的名称或字典中的键将数据插入到字符串中。