字符串格式化处理

远古写法

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

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

关键字插入法:

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

Python 3 推荐方法

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

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

基本转换

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

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

num = 1024
f'The number is {num:f}'
# 'The number is 1024.000000'

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

num = 1024
f'The number is {num:b}'
# '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 的设置格式,再在后面加上 %)

宽度、精度和千位分隔符

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

宽度使用整数表示:

num = 1024
f'{num:10}'
# ' 1024'

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

num = '1024'
f'{num:10}'
# '1024 '

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

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

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

num = 1024
f'{num:10.2f}'
# ' 1024.00'

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

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

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

num = 10000000000000
f'{num:,}'
# '10,000,000,000,000'

填充、对齐与符号

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

num = 1024
f'{num:010}'
# '0000001024'

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

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

num = 1024
f'{num:<10}'
'1024 '
f'{num:^10}'
' 1024 '
f'{num:>10}'
' 1024'

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

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

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

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

num = 1024
f'{num:>+10}'
' +1024'
f'{-num:>10}'
' -1024'

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

num = -1024
f'{num:>10}'
' -1024'
f'{-num:>+10}'
' +1024'

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

num = 1024
f'{num:=+10}'
'+ 1024'
f'{-num:=10}'
'- 1024'

总结

'{[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. Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Composer”

    按照Laravel文档的安装方式在windows上安装Laravel时,执行composer global require "laravel/installer". 然后命令行就显 ...

  2. Java虚拟机详解(三)------垃圾回收

    如果对C++这门语言熟悉的人,再来看Java,就会发现这两者对垃圾(内存)回收的策略有很大的不同. C++:垃圾回收很重要,我们必须要自己来回收!!! Java:垃圾回收很重要,我们必须交给系统来帮我 ...

  3. ~~Py2&Py3~~

    进击のpython python2 整型 int -- long(长整型) /获取的是整数 python3 整型 int /获取的是浮点数(小数) python2 print(range(1,10)) ...

  4. Running Code on a Thread Pool Thread_翻译

    The previous lesson showed you how to define a class that manages thread pools and the tasks that ru ...

  5. QQ Music 音乐插件DFX unable to open skin configration 的解决方法

    设置 C:\Program Files (x86)\Tencent\QQMusic\Plugins\Dfx\dfx_skin.txt  它的权限 允许程序读取执行

  6. Learning the Depths of Moving People by Watching Frozen

    基于双目的传统算法 对静止的物体, 在不同的 viewpoints 同一时刻进行拍摄, 根据拍摄到的结果, 使用三角测量算法计算出平面 2D 图像在 3D 图像中的坐标 单目 Ground Truth ...

  7. MFC在一个工程中启动其他工程的exe文件

    说明:有的时候把两个工程合并,但是偷懒不想在工程中添加代码,所以想到了这个办法,仅限偷懒哈哈哈哈 方法:新建一个主程序,在主程序的界面中添加按钮,在按钮的程序代码中添加以下语句: void CMain ...

  8. 将 unsiged char 转换成对应的十六进制字符用以显示出来如 unsiged char a[]={0x00,0x01,0x30,0x38}转化为“00013038”

    int CEnCryptionAndDeCryptionDlg::Byte2Hex(const unsigned char* input,unsigned long inLen, unsigned c ...

  9. xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。

    xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突

  10. 洛谷P2172 [国家集训队]部落战争 题解

    题目链接:https://www.luogu.org/problemnew/show/P2172 分析: 不要被[国家集训队]的标签吓到,其实这题不是很难. 本题可以对比P4304 [TJOI2013 ...