字符串格式化处理

远古写法

以前通常使用运算符号 %%s 插入的值 String 类型,%.3f 指插入的值为包含 3 位小数的浮点数:

  1. format1 = "%s, %s!" % ('Hello', 'World')
  2. # 'Hello, World!'

关键字插入法:

  1. temp = string.Template('I am $name, I like $what!;)
  2. temp.substitute(name='Liang', what='Apple')
  3. # 'I am Liang, I like Apple!'

Python 3 推荐方法

新版本 Python 中,应选择使用字符串方法 format,每个替换字段都用 {} 大括号(花括号)括起,括号内可留空或添加格式设置信息:

  • 一般用法:
  1. 'I am {},I like {}'.format('Liang', 'Apple')
  2. # 'I am Liang, I like Apple!'
  3. 'I am {0},I like {1}'.format('Liang', 'Apple')
  4. # 'I am Liang, I like Apple!'
  • 索引也可无需像上面一样顺序排列,但注意不能同时使用自动索引和手工索引
  1. 'I am {1},I like {0}'.format('Apple', 'Liang')
  2. # 'I am Liang, I like Apple!'
  • 更可以像上面关键字插入法一样,给每个替换字段命名,名称后面跟冒号可以设置格式:
  1. '{name} is {value:.2f},'.format(name='π', value=pi)
  2. # 'π is 3.14'
  • 终极简约写法,在字符串前面加上 f,便可直接将值或变量写在大括号内:
  1. f"{'π'} is {pi:.2f}"
  2. # 'π is 3.14'
  • 如果输出结果中需要包含大括号,则可使用两个大括号来指定:
  1. "{{我需要使用{what}啊!}}".format(what='大括号')
  2. # {我需要使用大括号啊!}
  • 关键字插入法可以和索引同时使用:
  1. '{foo} {1} {bar} {0}'.format(1, 2, foo=3, bar=4)
  2. # '3 1 2 4'

基本转换

指定占位符要转换的类型;

例如,你可以提供一个整数,但将其作为小数进行处理:

  1. num = 1024
  2. f'The number is {num:f}'
  3. # 'The number is 1024.000000'

亦或者将其作为二进制处理:

  1. num = 1024
  2. f'The number is {num:b}'
  3. # 'The number is 10000000000'

以下为字符串格式设置类型说明符:

说明符 含义
b 将整数表示为二进制
c 将整数解读为Unicode码点
d 将整数视为十进制数进行处理,这是整数默认使用的说明符
e 使用科学表示法来表示小数(用 e 来表示指数)
E 与 e 相同,但使用 E 来表示指数
f 将小数表示为定点数
F 与 f 相同,但与特殊值(nan 和 inf),使用大写表示
g 自动在定点表示法和科学表示法之间做选择。这是默认用于小数的说明符,但在默认情况下至少有 1 位小数
G 与 g 相同,但使用大写来表示指数和特殊值
n 与 g 相同,但插入随区域而异的数字分隔符
o 将整数表示为八进制数
s 保持字符串的格式不变,这是默认用于字符串的说明符
x 将整数表示为十六进制数并使用小写字母
X 与 X 相同,但使用大写字母
% 将数表示为百分比值(乘以100,按说明符 f 的设置格式,再在后面加上 %)

宽度、精度和千位分隔符

在字符串格式化处理是,不但可以转换类型,还可以设置转换字段的宽度和精度;

宽度使用整数表示:

  1. num = 1024
  2. f'{num:10}'
  3. # ' 1024'

数字和字符串的默认对齐方式不同:

  1. num = '1024'
  2. f'{num:10}'
  3. # '1024 '

精度也是使用整数表示,但需要在整数前加上小数点:

  1. num = 1024
  2. f'{num:.2f}'
  3. # '1024.00'

宽度可以和精度同时指定:

  1. num = 1024
  2. f'{num:10.2f}'
  3. # ' 1024.00'

字符串类型也可以指定精度,但不推荐使用,使用切片处理则更好理解:

  1. str = '今天天气不错~'
  2. f'{str:.2}'
  3. # '今天'

在冒号后面添加一个逗号可以为数值添加千位分隔符:

  1. num = 10000000000000
  2. f'{num:,}'
  3. # '10,000,000,000,000'

填充、对齐与符号

在不添加对齐符号(使用默认对齐方式)的情况下,尽可以使用 0 进行有意义的填充操作:

  1. num = 1024
  2. f'{num:010}'
  3. # '0000001024'

但是在添加了对齐符号之后,就可以在对齐符号前面任意添加一个字符表示填充字符了;

对齐符号:<(左对齐)、>(右对齐)、^(居中),写在宽度之前:

  1. num = 1024
  2. f'{num:<10}'
  3. '1024 '
  4. f'{num:^10}'
  5. ' 1024 '
  6. f'{num:>10}'
  7. ' 1024'

当替换字段为数值时,可为替换字段添加正负符号,

添加 + 符号时,加号写在对齐符号之后,宽度整数之前;

添加 - 符号时,减号写在替换字段的之前;

可以理解为将替换字段的数值乘以 +1(将 + 显示)或 -1

  1. num = 1024
  2. f'{num:>+10}'
  3. ' +1024'
  4. f'{-num:>10}'
  5. ' -1024'

如果需要为负数添加符号:

  1. num = -1024
  2. f'{num:>10}'
  3. ' -1024'
  4. f'{-num:>+10}'
  5. ' +1024'

= 是一种添加了正负符号之后的另一种对齐符号(可以理解为 两端对齐),作用是将填充字符放在符号和数字之间:

  1. num = 1024
  2. f'{num:=+10}'
  3. '+ 1024'
  4. f'{-num:=10}'
  5. '- 1024'

总结

  1. '{[0]sum[1][2][3][4][5]}'

0:为替换字段添加 - 符号(替换字段须为数字且不为负数,因为负数无需再多此一举);

1:为替换字段指定宽度之后可以在此位置指定填充字符,默认为空格;

2:为替换字段指定宽度之后可以在此位置指定对齐符号,<(左对齐) / ^(居中) / >(右对齐) / =(两端对齐,只能用于类型为数值切有正负符号的替换字段);

3:为替换字段添加 + 符号(替换字段须为数字);

4:指定替换字段的宽度,只能填写整数;

5:指定替换字段的精度或转换类型;

Python 学习笔记(6)— 字符串格式化的更多相关文章

  1. python学习笔记:字符串格式化

    % 格式化方法 "我的名字是 %s, 我的年龄是 %d" % (name, age) 常用格式:%[(name)][flags][width].[precision]typecod ...

  2. Python学习笔记3—字符串

    原始字符串 使用\转义或者r,这种方法在网站设置网站目录结构的时候非常管用. >>> dos="c:\news" >>> print dos c ...

  3. Python学习笔记:字符串

    字符串 字符串定义:字符串可以使用一对单引号.双引号或三引号来定义,即便是单个字符也会当做字符串来处理(Python中没有字符类型,单个字符也就是只有一个字符的字符串而已). 原始字符串:字符串中反斜 ...

  4. python学习笔记(二)-字符串方法

    python的字符串内建函数: #====================常用方法=============================name = 'besttest' new_name = n ...

  5. Python学习笔记之字符串

    一.字符串格式化 >>> format="Hello,%s. %s enough for ya?" >>> values=('World','H ...

  6. 从零开始的Python学习Episode 3——字符串格式化与for循环

    一.字符串格式化 利用一段注释记录想要输出的字符串格式,并用 %s . %d 或 %f 依次代替要输出的数据(%s代表字符串,%d代表数字,%f代表浮点数),然后在这段注释之后依次加上要输出的数据. ...

  7. 【Python学习笔记】字符串拼接方法(5种)总结

    字符串的 5 种拼接方法: “+”号 “,”号 直接连接 格式化 多行字符串拼接 第一种:“+”号 print("Hello"+"Python") 打印结果: ...

  8. python学习笔记(字符串操作、字典操作、三级菜单实例)

    字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...

  9. 【Python学习笔记】字符串操作

    字符串的表示 python中的字符串是一个常量,可以使用单引号'',双引号""或三引号""" """来创建一个字符串常量 ...

  10. Python学习笔记一--字符串的使用

    一.基本操作 1. 合并字符串:“+” 2. 打印重复的字符串:"*"      3. 按位获取字符串中的字符:索引      4. 按位获取字符串中的子字符串:分片      5 ...

随机推荐

  1. Java线程池源码及原理

    目录 1 说明 1.1类继承图 2 线程池的状态 3 源码分析 3.1完整的线程池构造方法 3.2 ctl 3.3 任务的执行 3.3.1 execute(Runnable command) 3.3. ...

  2. F#周报2019年第28期

    新闻 FableConf门票开始贩售 Bolero的HTML模板支持热加载 Bolero从v0.4到v0.5的升级指南 完整的SAFE-Chat迁移至了Fable 2 为纯函数式3D图形生成领域专用语 ...

  3. Spring Cloud 之 Hystrix.

    一.概述  在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依 ...

  4. [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效

    唉,还是自己对php执行sql语句运用不熟练.... 我的错误代码是这样的,(解决办法在最后) $re=sqlsrv_query($conn, "select * from visitor ...

  5. jmeter_遍历转换浮点时间戳

    概述 近期帮朋友解决了一个浮点时间戳转换的问题,在这里记录一下. 具体场景是有一个十位浮点时间戳的list,需要遍历转换为当前的标准时间. list如下: 实现步骤 实现步骤其实很简单,只需要一个fo ...

  6. SpringBoot学习笔记3

    十六:自定义拦截器 参考文档 16.1 编写拦截器类 extends WebMvcConfigurerAdapter 并重写WebMvcConfigurerAdapter,如下: package co ...

  7. LiteDB源码解析系列(1)LiteDB介绍

    最近利用端午假期,我把LiteDB的源码仔细的阅读了一遍,酣畅淋漓,确实收获了不少.后面将编写一系列关于LteDB的文章分享给大家,希望这么好的源码不要被埋没. 1.LiteDB是什么 这是一个小型的 ...

  8. c++语言常用转义序列符号

    \a      响铃 \n      换行符 \r       回车符 t        水平制表符(Tab键) \b      退格符(BackSpace键) \\       反斜线 \'     ...

  9. luogu题解 P3388 【【模板】割点(割顶)】

    外加定义:在一个无向图中,如果删掉点 x 后图的连通块数量增加,则称点 x 为图的割点. 外加图示 开始思路为割桥上的点为割点,后来证明的确正确. 不过可惜的是他的逆定理错了(gg了),不过数据很弱以 ...

  10. Linux操作系统和Windows操作系统的区别

    1.免费与收费 在中国,windows和linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫. 2. ...