在介绍使用字符串之前,我们要记得一件事——字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。
3.1 设置字符串格式
3.31 替换字段名
在最简单的情况下,只需向format提供要设置其格式的未命名参数,并在格式字符串中使用
未命名字段。此时,将按顺序将字段和参数配对。你还可给参数指定名称,这种参数将被用于相
应的替换字段中。你可混合使用这两种方法。
>>> "{foo} {} {bar} {}".format(1, 2, bar=4, foo=3)
'3 1 4 2'
还可通过索引来指定要在哪个字段中使用相应的未命名参数,这样可不按顺序使用未命名参数。
>>> "{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3)
'3 2 4 1'
你并非只能使用提供的值本身,而是可访问其组成部分(就像在常规Python代码中一样),如下所示:
>>> fullname = ["Alfred", "Smoketoomuch"]
>>> "Mr {name[1]}".format(name=fullname)
'Mr Smoketoomuch'
>>> import math
>>> tmpl = "The {mod.__name__} module defines the value {mod.pi} for π"
>>> tmpl.format(mod=math)
'The math module defines the value 3.141592653589793 for π'
如你所见,可使用索引,还可使用句点表示法来访问导入的模块中的方法、属性、变量和函数(看起来很怪异的变量name包含指定模块的名称)。
3.3.2 基本转换
>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' '\u03c0'
上述三个标志(s、r和a)指定分别使用str、repr和ascii进行转换。函数str通常创建外观
普通的字符串版本(这里没有对输入字符串做任何处理)。函数repr尝试创建给定值的Python表示(这里是一个字符串字面量)。函数ascii创建只包含ASCII字符的表示。
你还可指定要转换的值是哪种类型,更准确地说,是要将其视为哪种类型。例如,你可能提
供一个整数,但将其作为小数进行处理。为此可在格式说明(即冒号后面)使用字符f(表示定点数)
>>> "The number is {num}".format(num=42)
'The number is 42'
>>> "The number is {num:f}".format(num=42)#作为float处理
'The number is 42.000000'
>>> "The number is {num:b}".format(num=42)#作为二进制处理。
'The number is 101010'
这样的类型说明符有多个,完整的清单见下表。
还有一些字符串格式的内容,但是个人认为实用性不强,。。这里就没有写下了。
3.2 字符串方法
3.4.1 center
方法center通过在两边添加填充字符(默认为空格)让字符串居中。
>>> "The Middle by Jimmy Eat World".center(39)
' The Middle by Jimmy Eat World '
>>> "The Middle by Jimmy Eat World".center(39, "*")
'*****The Middle by Jimmy Eat World*****'
3.4.2 find
方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1。
>>> title = "Monty Python's Flying Circus"
>>> title.find('Monty')
0
>>> title.find('Python')
6
>>> title.find('Zirquss')
-1
你还可指定搜索的起点和终点(它们都是可选的)。
>>> subject.find('$$$')
0
>>> subject.find('$$$', 1) # 只指定了起点
20
>>> subject.find('!!!')
16
>>> subject.find('!!!', 0, 16) # 同时指定了起点和终点
-1
3.4.3 lower
方法lower返回字符串的小写版本。
>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'
如果列表包含'Gumby',而指定的用户名为'gumby'或'GUMBY',结果同样找不到。对于这种问题,一种解决方案是在存储和搜索时,将所有的用户名都转换为小写。这样做的代码类似于下面这样:
>>> if 'Gumby' in ['gumby', 'smith', 'jones']: print('Found it!')
...
>>> name = 'Gumby'
>>> names = ['gumby', 'smith', 'jones']
>>> if name.lower() in names: print('Found it!')
...
Found it!
一个与lower相关的方法是title
>>> "that's all folks".title()
"That'S All Folks"
3.4.4 replace
方法replace将指定子串都替换为另一个字符串,并返回替换后的结果。
>>> 'This is a test'.replace('is', 'eez')
'Theez eez a test'
3.4.5 split
split是一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分为序列。
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> 'Using the default'.split()
['Using', 'the', 'default']
如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)处进行拆分。
3.4.6 strip
方法strip将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果。
>>> ' internal whitespace is kept '.strip()
'internal whitespace is kept'
有两个差不多功能的方法。lstrip、rstrip只删除开头或末尾的指定字符。
3.4.7 translate
方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换。这个方法的优势在于能够同时替换多个字符,因此效率比replace高。
>>> table = str.maketrans('cs', 'kz')
>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
我们可以理解为c被k替换,s被z替换。
调用方法maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。例如,要模仿语速极快的德国口音,可将所有的空格都删除,要删除t也可以。
>>> table = str.maketrans('cs', 'kz', ' ')#删除空格
>>> 'this is an incredible test'.translate(table)
'thizizaninkredibletezt'
>>> table = str.maketrans('cs', 'kz', 't')#删除字符t
>>> 'this is an incredible test'.translate(table)
'hiz iz an inkredible ez'
3.4.9 判断字符串是否满足特定的条件
很多字符串方法都以is打头,如isspace、isdigit和isupper,它们判断字符串是否具有特定的性质(如包含的字符全为空白、数字或大写)。如果字符串具备特定的性质,这些方法就返回True,否则返回False。
网友评论