1 字符串的定义
字符串(str
)可以用成对的单引号('...'
)或双引号("..."
)来表示,结果完全相同。字符串字面值可以包含多行,一种实现方式是使用三重引号"""..."""
或'''...'''
,字符串中将自动包括行结束符,但也可以在换行的地方添加一个\
来避免此情况,例如:
>>> print("""\
... Usage: thingy [OPTIONS]
... -h Display this usage message
... -H hostname Hostname to connect to
... """)
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
字符串用于操作文本。
1.1 字符串的转义
要表示引号本身,则需要对它进行 “转义”,即在前面加一个\
,或者也可以使用不同类型的引号,例如:
>>> 'doesn\'t' # 使用 \ 来转义单引号
"doesn't"
>>> "doesn't" # 或者使用不同类型的引号
"doesn't"
如果不希望前置\
的字符转义成特殊字符,可以使用原始字符串,在引号前添加r
即可,例如:
>>> print('C:\some\name') # 这里 \n 表示换行
C:\some
ame
>>> print(r'C:\some\name') # 在引号前添加了 r,表示原始字符串
C:\some\name
原始字符串还有一个微妙的限制:一个原始字符串不能以奇数个\
字符结束,例如:
>>> print(r'C:\some\name\')
File "<stdin>", line 1
print(r'C:\some\name\')
^
SyntaxError: unterminated string literal (detected at line 1)
2 字符串的运算
字符串可以用+
合并(粘到一起),也可以用*
重复,例如:
>>> 'un' * 3 + 'ium' # 'um' 重复 3 次,然后合并 'ium'
'unununium'
相邻的两个或多个字符串字面值(引号标注的字符)会自动合并。拼接分隔开的长字符串时,这个功能特别实用。例如:
>>> 'Py' 'thon'
'Python'
>>>
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentness to have them joined together.'
这项功能只能用于两个字面值,不能用于变量或表达式,例如:
>>> prefix = 'Py'
>>> prefix 'thon' # 不能连接变量和字符串字面值
File "<stdin>", line 1
prefix 'thon'
^^^^^^
SyntaxError: invalid syntax
>>>
>>> ('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^^^^^
SyntaxError: invalid syntax
合并多个变量,或合并变量与字面值,要用+
,例如:
>>> prefix + 'thon'
'Python'
3 字符串的格式化
3.1 str.format()
方法
str.format()
方法的基本用法如下:
>>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
We are the knights who say "Ni!"
花括号及之内的字符(称为格式字段)被替换为传递给str.format()
的对象。
可以在花括号中使用数字来表示传递给str.format()
对象所在的位置,例如:
>>> print('{1} and {0}'.format('spam', 'eggs')
eggs and spam
可以在str.format()
和花括号中使用关键字参数名引用值,例如:
>>> print('This {food} is {adjective}.'.format(adjective='absolutely horrible', food='spam'))
This spam is absolutely horrible.
位置参数和关键字参数可以任意组合,例如:
>>> print('The story of {1}, {0}, and {other}.'.format('Manfred', 'Bill', other='Georg'))
The Story of Bill, Manfred, and Georg.
如果不想分拆较长的格式字符串,最好按名称引用变量进行格式化,不要按位置。这项操作可以通过传递字典,并用方括号[]
访问键来完成,例如:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
这也可以通过将字典作为采用**
标记的关键字参数传入来实现,例如:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
4 常用方法
4.1 字符串的删除与填充
str.strip(chars: str | None = None) -> str
返回原字符串的副本,移除其中的前导和末尾字符。参数
chars
为指定要移除字符的字符串。如果是None
,则默认移除空白符,例如:>>> ' spacious '.strip() 'spacious'
实际上,参数
chars
并非指定单个前缀或后缀,而是会移除参数值的所有组合,例如:>>> 'www.example.com'.strip('cmowz.') 'example'
最外侧的前导和末尾
chars
值将从字符串中移除。开头端的字符的移除将在遇到一个未包含于chars
所指定字符集的字符时停止。类似的操作也将在末尾端发生。
str.ljust(width: int, fillchar: str = ' ') -> str
返回长度为
width
的字符串,原字符串在其中靠左对齐。使用指定的fillchar
填充空位。如果width
小于等于字符串的长度,则返回原字符串的副本。例如:>>> 'abc'.ljust(8) 'abc ' >>> 'abcdefg'.ljust(5) 'abcdefg'
4.2 字符串的转换
str.islower() -> bool
如果字符串中至少有一个区分大小写的字符,且此类字符均为小写,则返回
True
,否则返回False
。
str.isupper() -> bool
如果字符串中至少有一个区分大小写的字符,且此类字符均为大写,则返回
True
,否则返回False
。
str.isalpha() -> bool
如果字符串中至少有一个字符,且所有字符都是字母,则返回
True
,否则返回False
。
str.isdigit() -> bool
如果字符串中至少有一个字符,且所有字符都是数字,则返回
True
,否则返回False
。数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字。
str.lower() -> str
返回原字符串的副本,其所有区分大小写的字符均被转换为小写。
str.replace(old: str, new: str, count: int | None = None) -> str
返回一个字符串的副本,其中所有出现的子字符串
old
都被new
替换。如果给定了可选参数count
,则仅替换前count
个出现的子字符串old
。
4.3 字符串的拆分与拼接
str.split(sep: str | None = None, maxsplit: int = -1) -> list
返回一个由字符串内单词组成的列表,使用
sep
作为分隔符,例如:>>> '1,2,3'.split(',') ['1', '2', '3']
sep
可能是由多个字符组成的单个分隔符(要使用多个分隔符进行拆分,请使用re.split()
),例如:>>> '1<>2<>3<4'.split('<>') ['1', '2', '3<4']
使用指定的分隔符拆分一个空字符串将返回
['']
。如果给出了sep
,则连续的分隔符不会被组合在一起,而是会被视为分隔空字符串,例如:>>> '1,,2'.split(',') ['1', '', '2']
如果
sep
未指定或为None
,则连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。因此,使用None
拆分空字符串或仅包含空格的字符串将返回[]
。例如:>>> '1 2 3'.split() ['1', '2', '3'] >>> ' 1 2 3 '.split() ['1', '2', '3']
如果给出了
maxsplit
,则最多进行maxsplit
次拆分。如果maxsplit
未指定或为 -1,则不限制拆分次数。例如:>>> '1,2,3'.split(',', maxsplit=1) ['1', '2,3'] >>> '1 2 3'.split(maxsplit=1) ['1', '2 3']
str.join(iterable) -> str
返回一个由
iterable
中的字符串拼接而成的字符串。如果iterable
中存在任何非字符串值,包括bytes
对象,则会引发TypeError
。调用该方法的字符串将作为元素之间的分隔。
4.4 子字符串操作
str.count(sub: str, start: int | None = None, end: int | None = None) -> int
返回子字符串
sub
在[start, end]
范围内非重叠出现的次数。可选参数start
和end
会被解读为切片表示法。例如:>>> ‘ABCabc'.count('ab') 1 >>> 'ABCabc'.count('ab', 1, 3) 0