python字符串操作
本文所有代码、方法都已在python3.7.3下测试执行通过
基本操作
索引
切片
成员资格检查
长度
最小值和最大值
字符串不可变性
设置字符串的格式
使用字符串格式设置运算符
模板字符串
字符串方法format(推荐用法)
字符串包含有关如何设置格式的信息,而这些信息是使用一种微型格式指定语言
(mini-language)指定的。每个值都被插入字符串中,以替换用花括号括起的替换字段。
在格式字符串中,最激动人心的部分为替换字段。替换字段由如下部分组成,其中每个部分
都是可选的。
- 字段名
索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。除指定值
外,还可指定值的特定部分,如列表的元素。 - 转换标志
跟在叹号后面的单个字符。当前支持的字符包括 r (表示 repr )、 s (表示 str )
和 a (表示 ascii )。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使
用指定的函数将对象转换为字符串,再做进一步的格式设置。 - 格式说明符
跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的)。格
式说明符让我们能够详细地指定最终的格式,包括格式类型(如字符串、浮点数或十六
进制数),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。
替换字段名
最简单的情况下 向format提供其格式的未命名参数 并在格式字符串中使用未命名参数
此时按照顺序将字段与参数匹配
s = '{}, world!'.format('hello')
token = 'asdasf{}asdas'.format(1)
lst = 'asdf{}asd'.format([1, 2, 3])
print(token)
print(s)
print(lst)
打印结果为
asdasf1asdas
hello, world!
asdf[1, 2, 3]asd
当然 也可以为参数指定名称 或者或者通过索引指定在某个字段中使用相应的未命名参数
名称和索引可以混用
s = '{foo} {} {bar} {}'.format(1, 2, bar=4, foo=3)
token = '{foo} {1} {bar} {0}'.format(1, 2, bar=4, foo=3)
print(token)
print(s)
打印结果为
3 2 4 1
3 1 4 2
记住不能同时使用手工索引和自动索引 这样会让代码变得很混乱以及降低可读性
替换内容并非只能提供值本身 还可以访问其组成部分 例如下面的代码
import math
fullname = ["Alfred", "Smoketoomuch"]
name = "Mr {name[1]}".format(name=fullname)
tmpl = "The {mod.__name__} module defines the value {mod.pi} for π"
s = tmpl.format(mod=math)
print(name)
print(s)
程序运行结果为
Mr Smoketoomuch
The math module defines the value 3.141592653589793 for π
如上面的代码 可使用索引 还可使用句点表示法来访问导入的模块中的方法 属性 变量和函数
基本转换
指定要在字段中包含的值后 可以添加有关如何设置格式的命令
首先 我们来看提供一个转换标志的情况
print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
程序运行结果为
π 'π' '\u03c0'
上述三个标志(s r和a)指定分别使用str repr和ascii 进行转换
函数 str 通常创建外观普通的字符串版本(这里没有对输入字符串做任何处理)
函数 repr 尝试创建给定值的Python表示(这里是一个字符串字面量)
函数 ascii 创建只包含ASCII字符的表示 类似于Python 2中的repr
此外 还可指定要转换的值是哪种类型 或者说将其视为那种类型
print('The number is {num}'.format(num=42)) # 整数格式输出
print('The number is {num:f}'.format(num=42)) # 浮点数格式输出
print('The number is {num:b}'.format(num=42)) # 二进制格式输出
程序执行结果为
The number is 42
The number is 42.000000
The number is 101010
字符串格式设置中的类型说明符如下表
宽度 精度和千位分隔符
设置浮点数的格式时 默认在小数点后显示六位小数 并且根据需要设置字段的宽度 不进行任何形式的填充
实际应用中 我们可以根据个人需求指定宽度和精度
字符串和数字的对齐方式是不同的
print('{num:10}'.format(num=3))
print('{name:10}'.format(name='Bob'))
程序运行结果为
3(这个地方是告诉你这一行到此为止)
Bob (这个地方是告诉你这一行到此为止)
浮点数指定精度和宽度如下
from math import pi
print('{pi:10.2f}'.format(pi=pi))
程序运行结果为
3.14
对于其他类型我们也可以指定精度 不过一般不会有这种需求
例如字符串类型指定精度
print('{:.5}'.format('Guido van Rossum'))
Guido
可使用逗号添加千位分隔符
print('{:,}'.format(1000*1000))
1,000,000