首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python3从零学习-、文本库str

本节来讲一下文本处理相关的库

str

字符串定义:

在 Python 中处理文本数据是使用 str对象,也称为字符串。字符串是由 Unicode 码位构成的不可变序列。

字符串字面值有多种不同的写法:

单引号:'允许包含有"双"引号’

双引号:"允许包含有'单'引号”

三重引号:'''三重单引号''',"""三重双引号"""

使用三重引号的字符串可以跨越多行 —— 其中所有的空白字符都将包含在该字符串字面值中。

classstr(object='')

classstr(object=b'',encoding='utf-8',errors='strict')

返回object的 字符串版本。如果未提供object则返回空字符串。在其他情况下str()的行为取决于encoding或errors是否有给出。

-r 表示字符串中所有的字符表示其本身,比如,反斜杠就是反斜杠,不是用来转义的,'\n' 表示换行符,是一个字符,而 r'\n' 则是两个字符:一个反斜杠、一个小写n。

-u 表示字符串是Unicode字符串,在Python 3中保留是为了兼容Python 2,而Python 3中的字符串默认都是Unicode字符串,在Python 3中,不需要添加,而且不能和 r 一起使用。

字符串方法:

str.capitalize()

返回原字符串的副本,其首个字符大写,其余为小写。

示例:

print(str.capitalize('a我是个字符串’))

输出:

A我是个字符串

str.casefold()

返回原字符串消除大小写的副本。消除大小写的字符串可用于忽略大小写的匹配。

消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。

例如,德语小写字母 'ß' 相当于 "ss"。由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss"。

示例:

print(str.casefold('ABGQ我是个字符串'))

输出:

abgq我是个字符串

str.center(width[, fillchar])

返回长度为 width 的字符串,原字符串在其正中。

使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。如果 width 小于等于 len(s) 则返回原字符串的副本。

示例:

test_str = str('ABGQ我是个字符串')

print(test_str.center(20, 'M'))

输出:

MMMMMABGQ我是个字符串MMMMM

str.count(sub[, start[, end]])

反回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。可选参数 start 与 end 会被解读为切片表示法。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.count('A’)) # 统计A在test_str中出现的次数

print(test_str[0:5]) # 0到5位置的字符串是“ABGQ我”

print(test_str.count('A', 0, 5)) # 统计A在test_str字符串,[0,5]范围内出现的次数,[0,5]范围是‘ABGQ我’,所以统计出来的个数是1个

输出:

2

ABGQ我

1

str.encode(encoding="utf-8", errors="strict")

返回原字符串编码为字节串对象的版本。默认编码为 'utf-8’。

可以给出 errors 来设置不同的错误处理方案。errors 的默认值为 'strict',表示编码错误会引发 UnicodeError。

其他可用的值为 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及任何其他通过 codecs.register_error() 注册的值。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.encode()) # 默认编码 ‘utf-8’

print(test_str) # 说明encode操作不会改变test_str

输出:

b'ABGQ\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2ABGQ'

ABGQ我是个字符串ABGQ

str.endswith(suffix[, start[, end]])

如果字符串以指定的 suffix 结束返回 True,否则返回 False。suffix 也可以为由多个供查找的后缀构成的元组。

如果有可选项 start,将从所指定位置开始检查。如果有可选项 end,将在所指定位置停止比较。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.endswith('BGQ'))

print(test_str.endswith('BG'))

print(test_str.endswith('BGQ', 0, 4)) #比较[0:4]就是‘ABGQ’字符串的结尾是否是’BGQ’,所以这里是True

print(test_str.endswith('BGQ', 0, 5)) #比较[0:5]就是’ABGQ我’字符串的结尾是否是’BGQ’,所以这里是False

输出:

True

False

True

False

str.expandtabs(tabsize=8)

返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。) 如果字符为换行符 (\n) 或回车符 (\r),它会被复制并将当前列重设为零。任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示。

>>> '01\t012\t0123\t01234'.expandtabs()

'01 012 0123 01234'

>>> '01\t012\t0123\t01234'.expandtabs(4)

'01 012 0123 01234'

str.find(sub[, start[, end]])

返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。可选参数 start 与 end 会被解读为切片表示法。如果 sub 未被找到则返回 -1。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.find('A’)) # 从头开始找第一个A所在的位置索引,所以是0

print(test_str.find('Q’)) # 从头开始找第一个Q所在的位置索引,所以是3

print(test_str.find('个’)) # 从头开始找第一个“个”所在的位置索引,所以是6

print(test_str.find('B', 5)) # 从位置索引是5的地方开始找第一个B所在的位置索引,所以是11

print(test_str.find('K’)) # 从头开始找第一个K所在的位置索引,因为没找到,所以返回-1

输出:

3

6

11

-1

str.format(*args, **kwargs)

执行字符串格式化操作。

调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。

每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。

返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

示例:

addend1 = 3

addend2 = 6

sum = addend1 + addend2

# format 以位置参数做替换域

print('the sum is + = '.format(addend1, addend2, sum))

# format 以关键字参数做替换域

print('the sum is + = '.format(addend1_name=addend1, addend2_name=addend2, sum_name=sum))

输出:

the sum is 3 + 6 = 9

the sum is 3 + 6 = 9

str.index(sub[, start[, end]])

类似于 find(),但在找不到子类时会引发 ValueError。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

test_str.index('H’)

输出:

test_str.index('H')

ValueError: substring not found

str.isalnum()

如果字符串中的所有字符都是字母数字,并且至少有一个字符,则返回true,否则为false。

如果下面其中一个返回True,则字符c是字母数字:c.isalpha()、c.isdecimal()、c.isdigit()或c.isnumeric()。

示例:

test_str1 = str('99ABGQ我是个字符串ABGQ33')

print(test_str1.isalnum())

test_str2 = str('#99ABGQ我是个字符串ABGQ33%')

print(test_str2.isalnum())

输出:

True

False

str.isalpha()

如果字符串中的所有字符都是字母顺序的,并且至少有一个字符,则返回true,否则返回false。

字母字符是在Unicode字符数据库中定义为“字母”的字符,即,一般类别属性为“Lm”、“Lt”、“Lu”、“Ll”或“Lo”的。

注意,这与Unicode标准中定义的“Alphabetic”属性不同。

示例:

test_str1 = str('99ABGQ我是个字符串ABGQ33’) #包含数字,所以返回False

print(test_str1.isalpha())

test_str2 = str('ABGQ我是个字符串ABGQ’) #纯Unicode字符,所以返回True。中文汉字也是Unicode字符。

print(test_str2.isalpha())

输出:

False

True

str.isdecimal()

如果字符串中的所有字符都是十进制字符,并且至少有一个字符,则返回true,否则返回false。

十进制字符是那些可以用来形成以10为基数的数字的字符,例如U+0660,阿拉伯-印度数字0。在形式上,十进制字符是Unicode通用类别“Nd”中的字符。

示例:

test_str1 = str('99ABGQ我是个字符串ABGQ33')

print(test_str1.isdecimal())

print(test_str2.isdecimal())

输出:

False

True

str.isdigit()

如果字符串中的所有字符都是数字,并且至少有一个字符,则返回true,否则返回false。

数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字。这包括不能用于以10为基数形成数字的数字,如Kharosthi数字。

在形式上,数字是具有属性值Numeric_Type= digit或Numeric_Type=Decimal的字符。

str.isidentifier()

如果字符串是一个有效的标识符,则返回true,否则返回false。

示例:

test_str = str('school’) # 有效的标识符

print(test_str.isidentifier())

test_str = str('1school’) # 无效的标识符,因为是数字开头的字符串

print(test_str.isidentifier())

输出:

True

False

str.islower()

如果字符串中都是小写字母,并且至少有一个字符,则返回true,否则返回false。

示例:

test_str = str('99school我@#¥’) #都是小写字母,返回true

print(test_str.islower())

test_str = str('99我是谁@#¥’) #没有字母,返回false

print(test_str.islower())

test_str = str('Who am I?’) #包含大写字母,返回false

print(test_str.islower())

输出:

True

False

False

str.isupper()

如果字符串中都是大写字母,并且至少有一个字符,则返回true,否则返回false。

示例:

test_str = str('i am shanhai')

print(test_str.isupper()) #包含了小写字母,所以返回false

test_str = str('I Am Shanhai')

print(test_str.isupper()) #包含了小写字母,所以返回false

test_str = str('I AM SHANHAI')

print(test_str.isupper()) #全部是大写字母,所以返回true

输出:

False

False

True

str.isnumeric()

如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回true,否则为false。

数字字符包括数字字符,以及所有具有Unicode数值属性的字符。

在形式上,数字字符是那些具有属性值Numeric_Type=Digit、Numeric_Type=Decimal或Numeric_Type= numeric的字符。

str.isprintable()

如果字符串中的所有字符都可打印或字符串为空,则返回true,否则返回false。

不可打印字符是Unicode字符数据库中定义为“其他”或“分隔符”的字符,ASCII空格(0x20)除外,它被认为是可打印的。

注意,在这个上下文中,可打印字符是在字符串上调用repr()时不应该转义的字符。它与向sys写入的字符串的处理无关。stdout或sys.stderr。

str.isspace()

如果字符串中只有空白字符并且至少有一个字符,则返回true,否则返回false。

空白字符是Unicode字符数据库中定义为“其他”或“分隔符”的字符,而具有双向属性的字符是“WS”、“B”或“S”之一。

str.istitle()

如果字符串是有标题的字符串,并且至少有一个字符,则返回true。

例如大写字符只能跟在无大小写字符后面,小写字符只能跟在大小写字符后面。否则返回假。

str.join(iterable)

返回一个由 iterable 中的字符串拼接而成的字符串。

如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。调用该方法的字符串将作为元素之间的分隔。

str.ljust(width[, fillchar])

返回长度为 width 的字符串,原字符串在其中靠左对齐。

使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。如果 width 小于等于 len(s) 则返回原字符串的副本。

str.rjust(width[, fillchar])

返回长度为 width 的字符串,原字符串在其中靠右对齐。

使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。如果 width 小于等于 len(s) 则返回原字符串的副本。

str.lstrip([chars])

返回原字符串的副本,移除其中的前导字符。chars 参数为指定要移除字符的字符串。

如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个前缀;而是会移除参数值的所有组合。

str.rstrip([chars])

返回原字符串的副本,移除其中的末尾字符。chars 参数为指定要移除字符的字符串。

如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合。

str.partition(sep)

在 sep 首次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。

如果分隔符未找到,则返回的 3 元组中包含字符本身以及两个空字符串。

str.replace(old, new[, count])

返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。如果给出了可选参数 count,则只替换前 count 次出现。

str.rfind(sub[, start[, end]])

返回子字符串 sub 在字符串内被找到的最大(最右)索引,这样 sub 将包含在 s[start:end] 当中。

可选参数 start 与 end 会被解读为切片表示法。如果未找到则返回 -1。

str.rindex(sub[, start[, end]])

类似于 rfind(),但在子字符串 sub 未找到时会引发 ValueError。

str.rpartition(sep)

在 sep 最后一次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。

如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符串本身。

str.rsplit(sep=None, maxsplit=-1)

返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。

如果 sep 未指定或为 None,任何空白字符串都会被作为分隔符。除了从右边开始拆分,rsplit() 的其他行为都类似于下文所述的 split()。

str.split(sep=None, maxsplit=-1)

返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。

如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。

如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。

如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 '1,,2'.split(',') 将返回 ['1', '', '2'])。

sep 参数可能由多个字符组成 (例如 '123'.split('') 将返回 ['1', '2', '3'])。使用指定的分隔符拆分空字符串将返回 ['']。

str.splitlines([keepends])

返回由原字符串中各行组成的列表,在行边界的位置拆分。结果列表中不包含行边界,除非给出了 keepends 且为真值。

此方法会以下列行边界进行拆分。特别地,行边界是 universal newlines 的一个超集。

str.startswith(prefix[, start[, end]])

如果字符串以指定的 prefix 开始则返回 True,否则返回 False。prefix 也可以为由多个供查找的前缀构成的元组。

如果有可选项 start,将从所指定位置开始检查。如果有可选项 end,将在所指定位置停止比较。

str.strip([chars])

返回原字符串的副本,移除其中的前导和末尾字符。chars 参数为指定要移除字符的字符串。

如果省略或为 None,则 chars 参数默认移除空格符。实际上 chars 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合。

示例:

test_str = str(' i am shanhai ')

print(test_str.strip()) #移除了字符串前后的空格符

test_str = str('i am shanhai')

print(test_str.strip('i’)) #移除字符串前后的’i’

输出:

i am shanhai

am shanha

str.swapcase()

返回原字符串的副本,其中大写字符转换为小写,反之亦然。

请注意 s.swapcase().swapcase() == s 并不一定为真值。

示例:

test_str = str('I Am Shanhai')

print(test_str.swapcase())

输出:

i aM sHANHAI

str.title()

返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。

示例:

test_str = str('i am shanhai')

print(test_str.title())

输出:

I Am Shanhai

static str.maketrans(x[, y[, z]])

此静态方法返回一个可供 str.translate() 使用的转换对照表。

如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode 码位序号、(任意长度的)字符串或 None 的字典。

字符键将会被转换为码位序号。

如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。

如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 None。

str.translate(table)

返回原字符串的副本,其中每个字符按给定的转换表进行映射。转换表必须是一个使用 __getitem__() 来实现索引操作的对象,通常为 mapping 或 sequence。

当以 Unicode 码位序号(整数)为索引时,转换表对象可以做以下任何一种操作:返回 Unicode 序号或字符串,将字符映射为一个或多个字符;

返回 None,将字符从结果字符串中删除;或引发 LookupError 异常,将字符映射为其自身。

你可以使用 str.maketrans() 基于不同格式的字符到字符映射来创建一个转换映射表。

示例:

transverter_before = 'abcde'

transverter_after = '12345'

transverter_table = str.maketrans(transverter_before, transverter_after) # 建立转换表

test_str = str('+@AB我是个字符串abgq')

print(test_str.translate(transverter_table)) #把’abcde'用'12345’替换,所以这里a替换成1,b替换成2,其他字符不变。

输出:

+@AB我是个字符串12gq

str.lower()

返回原字符串的副本,其所有区分大小写的字符均转换为小写。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.lower())

输出:

abgq我是个字符串abgq

str.upper()

返回原字符串的副本,其中所有区分大小写的字符 4 均转换为大写。

请注意如果 s 包含不区分大小写的字符或者如果结果字符的 Unicode 类别不是 “Lu” (Letter, uppercase) 而是 “Lt” (Letter, titlecase) 则 s.upper().isupper() 有可能为 False。

示例:

test_str = str('+@AB我是个字符串abgq')

print(test_str.upper())

输出:

+@AB我是个字符串ABGQ

str.zfill(width)

返回原字符串的副本,在左边填充 ASCII '0' 数码使其长度变为 width。正负值前缀 ('+'/'-') 的处理方式是在正负符号 之后 填充而非在之前。

如果 width 小于等于 len(s) 则返回原字符串的副本。

示例:

test_str = str('ABGQ我是个字符串ABGQ')

print(test_str.zfill(5))

print(test_str.zfill(25)) # 左边补0

test_str = str('+ABGQ我是个字符串ABGQ’) # 在+之后填充0

print(test_str.zfill(25))

test_str = str('-ABGQ我是个字符串ABGQ’) # 在-之后填充0

print(test_str.zfill(25))

输出:

ABGQ我是个字符串ABGQ

00000000000ABGQ我是个字符串ABGQ

+0000000000ABGQ我是个字符串ABGQ

-0000000000ABGQ我是个字符串ABGQ

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200428A039N600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券