字符串格式化
2019-06-16 本文已影响0人
YuAllon
写在前面的话:
在处理天文数据的过程中,尤其是天文坐标转换时,自己希望能得到同样精度的数据,这时候就要用到字符串格式化,一开始自己对字符串格式化也只是停留在取精度这样简单的印象中。随着慢慢的了解,发现字符串格式化远比自己想象中强大。故做以下笔记记之。
字符串格式化
字符串格式化允许在单个步骤中对一个字符串执行多个特定类型的。
两种实现形式:
字符串格式化表达式:'...%s...' % (values)
字符串格式化方法调用:'...{}...'.format(values)
尽管两种方式都能实现字符串的格式化,我自己比较喜欢表达式,所以以下笔记只对字符串格式化表达式做总结。
字符串格式化表达式基础
当应用在字符串上的时候,%运算符提供了根据自定义,将不同类型的值格式化为字符串的简单方法。
格式化字符串:
- 在%运算符的左侧放置一个需要格式化的字符串,这个字符串带有一个或者多个内嵌的转换目标,都以%开头。
- 在运算符%右侧放置一个或多个,内嵌在元组中的对象,这些对象将会插入到你想让Python进行格式化的左侧字符串中,并替换一个或者多个转换目标。
# ' '及其内部是%运算符左侧需要格式化的字符串,()及其内部是%运算符右边元组对象
'%04d -- %.3f -- %s' % (42, 3.14159, [1, 2, 3])
# 格式化后的输出,因为是字符串格式化,所以输出的结果一定是字符串类型
'0042 -- 3.142 -- [1, 2, 3]'
上面例子中:当不止一个值待格式化的时候,右侧应该用圆括号括起来(放到元组中)。
字符串格式化类型码:
代码 | 意义 |
---|---|
s | |
r | 与s相同,但使用repr,而不是str |
c | 字符(int或str) |
d | |
i | 整数 |
0 | 八进制数值 |
x | 十六进制数字 |
X | 与x相同,但是使用大写字母 |
e | 带有指数的浮点数,小写 |
E | 与e相同,大写 |
f | |
F | 与f相同,大写 |
g | 浮点数e或f |
G | 浮点数E或F |
% | %字面量(编码为%%) |
一般结构:
%[(keyname)][flags][width][.precision]typecode
keyname:为索引在表达式右侧使用的字典提供键名称
flags:罗列出说明格式的标签,如左对齐(-)、数值符号(+)、正数前的空白以及负数前的-(空格)和零填充(0)
width:为被替换的文本给出总的最小字段宽度
.precision:为浮点数设置小数点后显示的数位(精度)
width和precision部分,都可以编写一个*,以指定他们应该从表达式右侧的输入值中的下一项去值。
#例子
x = 1234
#%-6d表示左对齐;%06d字符串长度为6,空值0填充
res = 'integers: ...%d...%-6d...%06d' % (x, x ,x)
res
'integers: ...1234...1234 ...001234'
#
'%f, %.2f, %.*f' %(1/3.0, 1/3.0, 4, 1/3.0)
'0.333333, 0.33, 0.3333'
#基于字典的格式化表达式
'%(qty)d more %(food)s' % {'qty':1, 'food': 'spam'}
'1 more spam'
参考书籍:《Python学习手册》
2019-06-16