2 字符串类型

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]范围内非重叠出现的次数。可选参数startend会被解读为切片表示法。例如:

>>> ‘ABCabc'.count('ab')
1
>>> 'ABCabc'.count('ab', 1, 3)
0
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值