前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python: 字符串的内置方法介绍

Python: 字符串的内置方法介绍

作者头像
Exploring
发布2022-09-20 14:10:40
1K0
发布2022-09-20 14:10:40
举报
文章被收录于专栏:数据处理与编程实践

文章背景: 字符串(str)是Python中的数据类型之一,在数据处理中经常会用到。下面就来介绍字符串的内置方法。

通过dir(str)可以查看字符串的属性和内置方法。

代码语言:javascript
复制
print(dir(str))
代码语言:javascript
复制
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

可以看到,字符串有45个内置方法。

1 strip()、lstrip()、rstrip()方法

2 center()、ljust()、rjust()、zfill()方法

3 title()、lower()、upper()方法

4 capitalize()、casefold()、swapcase()方法

5 endswith()、startswith()方法

6 find()、rfind()、index()、rindex()方法

7 join()、count()、expandtabs()方法

8 split()、rsplit()、splitlines()方法

9 replace()、partition()、rpartition()方法

10 encode()方法

11 maketrans()、translate()方法

12 format()、format_map()方法

13 isspace()、istitle()、islower()、isupper()方法

14 isalpha()、isnumeric()、isalnum()、isdecimal()、isdigit()方法

15 isascii()、isprintable()、isidentifier()方法

1 strip()、lstrip()、rstrip()方法

str.strip([chars])

移除字符串头尾指定的字符(默认为空格)或字符序列。

str.lstrip([chars])

截掉字符串左边的空格或指定字符。

str.rstrip([chars])

删除 string 字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。

代码语言:javascript
复制
str1 = "123abcrunoob321"

print(str1.strip('12'))  # 字符序列为 12
print(str1.lstrip('12'))
print(str1.rstrip('12'))
代码语言:javascript
复制
3abcrunoob3
3abcrunoob321
123abcrunoob3

这三个方法只是返回字符串指定字符被删除之后的副本,并不会改变字符串本身。

2 center()、ljust()、rjust()、zfill()方法

str.center(width[, fillchar])

width -- 字符串的总宽度

fillchar -- 填充字符

返回一个原字符串居中,并使用填充字符填充至长度 width 的新字符串。默认填充字符为空格。

str.ljust(width[, fillchar])

返回一个原字符串左对齐,并使用填充字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

str.rjust(width[, fillchar])

返回一个原字符串右对齐,并使用填充字符填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。

代码语言:javascript
复制
str1 = "123abcrunoob321"

print(str1.center(25, "*"))
print(str1.ljust(25, "*"))
print(str1.rjust(25, "*"))
代码语言:javascript
复制
*****123abcrunoob321*****
123abcrunoob321**********
**********123abcrunoob321

str.zfill(width)

返回指定长度的字符串,原字符串右对齐,前面填充0。

代码语言:javascript
复制
str1 = "123abcrunoob321"
print(str1.zfill(25))
代码语言:javascript
复制
0000000000123abcrunoob321
3 title()、lower()、upper()方法

str.title()

返回"标题化"的字符串,就是说所有单词都是以大写开始。请注意,非字母后的第一个字母将转换为大写字母。

string.lower()

返回小写的字符串。它将所有大写字符转换为小写。

str.upper()

将字符串中的小写字母转为大写字母。

代码语言:javascript
复制
txt = "heLLo b2b2b2 and 3g3g3g"

print(txt.title())
print(txt.lower())
print(txt.upper())
代码语言:javascript
复制
Hello B2B2B2 And 3G3G3G
hello b2b2b2 and 3g3g3g
HELLO B2B2B2 AND 3G3G3G
4 capitalize()、casefold()、swapcase()方法

str.capitalize()

将字符串的第一个字母变成大写,其他字母变小写。

代码语言:javascript
复制
s = ' a, B'     # a 前面有空格
txt = "heLLo b2b2b2"

print(s.capitalize())
print(txt.capitalize())
代码语言:javascript
复制
 a, b
Hello b2b2b2

str.casefold()

返回一个字符串,其中所有字符均为小写。

lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。

代码语言:javascript
复制
S1 = "Python EXAMPLE....WOW!!!"  # 英文
S2 = "ß"  # 德语

print(S1.casefold())
print(S1.lower(), end="\n\n")

print(S2.casefold())  # 德语的"ß"正确的小写是"ss"
print(S2.lower())
代码语言:javascript
复制
python example....wow!!!
python example....wow!!!

ss
ß

str.swapcase()

对字符串的大小写字母进行转换,即将大写字母转换为小写字母,小写字母会转换为大写字母

代码语言:javascript
复制
str1 = "abCDE--RuNOob!!!"
print(str1.swapcase())
代码语言:javascript
复制
ABcde--rUnoOB!!!
5 endswith()、startswith()方法

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

如果字符串含有指定的后缀返回 True,否则返回 False。

str.startswith(substr, beg=0,end=len(string))

检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

代码语言:javascript
复制
Str2 = '123run'

suffix = 'run'
print(Str2.endswith(suffix))
print(Str2.endswith(suffix, 0, 6), end="\n\n")

substr = '123'
print(Str2.startswith(substr))
print(Str2.startswith(substr, 0, 3))
代码语言:javascript
复制
True
True

True
True
6 find()、rfind()、index()、rindex()方法

str.find(substr, beg=0, end=len(string))

如果包含子字符串,返回开始的索引值,否则返回-1。

str.rfind(substr, beg=0 end=len(string))

返回字符串最后一次出现的位置,如果没有匹配项则返回-1。

代码语言:javascript
复制
str1 = "this is a example!"
str2 = "is"

print(str1.find(str2))
print(str1.find(str2, 0, 4), end="\n\n")

print(str1.rfind(str2))
print(str1.rfind(str2, 0, 4))
代码语言:javascript
复制
2
2

5
2

str.index(substr, beg=0, end=len(string))

如果包含子字符串,返回开始的索引值,否则抛出异常。 该方法与find()方法一样,只不过如果substr不在 string中会抛出异常。

str.rindex(substr, beg=0, end=len(string))

返回子字符串 substr 在字符串中最后出现的位置,如果没有匹配的字符串会抛出异常。

代码语言:javascript
复制
str1 = "this is a example!"
str2 = "is"

print(str1.index(str2))
print(str1.index(str2, 6))
代码语言:javascript
复制
2
ValueError: substring not found
代码语言:javascript
复制
str1 = "this is a example!"
str2 = "is"

print(str1.rindex(str2))
print(str1.rindex(str2, 6))
代码语言:javascript
复制
5
ValueError: substring not found
7 join()、count()、expandtabs()方法

str.join(sequence)

将序列中的元素以指定的字符连接生成一个新的字符串。

代码语言:javascript
复制
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b")
print(s1.join(seq))
print(s2.join(seq))
代码语言:javascript
复制
r-u-n-o-o-b
runoob

str.count(sub, start= 0,end=len(string))

返回子字符串在字符串中出现的次数。

代码语言:javascript
复制
str1 = "www.runoob.com"
sub = 'w'

print(str1.count(sub))
print(str1.count(sub, 0, 2))
代码语言:javascript
复制
3
2

str.expandtabs(tabsize=8)

把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8。

\t 是补全当前字符串长度到8的整数倍,最少 1 个最多 8 个空格。

补多少要看你 \t 前字符串长度。

比如当前字符串长度 10,那么 \t 后的长度是 16,也就是补 6 个空格。

如果当前字符串长度 12,此时 \t 后的长度是 16,补 4 个空格。

代码语言:javascript
复制
str1 = "runoob\t12345\tabc"
print('原始字符串:', str1)

# 默认 8 个空格
print('替换 \\t 符号:', str1.expandtabs())

# 2 个空格
print('使用 2 个空格替换 \\t 符号:', str1.expandtabs(2))

# 3 个空格
print('使用 3 个空格:', str1.expandtabs(3))
代码语言:javascript
复制
原始字符串: runoob   12345   abc
替换 \t 符号: runoob  12345   abc
使用 2 个空格替换 \t 符号: runoob  12345 abc
使用 3 个空格: runoob   12345 abc

如果不使用expandtabs()方法,对于\t ,在 Python3 中是补 4 的整数倍个空格。

代码语言:javascript
复制
str1 = "this is\tstring example....wow!!!"
str2 = "athis iss\tstring example....wow!!!"
str3 = "athis i\tstring example....wow!!!"
str4 = "athis is    string example....wow!!!"  # is 和 string 中间输入 4 个空格

print(str1)
print("a"+str1)
print(str2)
print(str3)
print(str4)
代码语言:javascript
复制
this isstring example....wow!!!
athis isstring example....wow!!!
athis issstring example....wow!!!
athis istring example....wow!!!
athis is    string example....wow!!!
8 split()、rsplit()、splitlines()方法

str.split(str1="", num=string.count(str1))

str1 -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。默认为-1,即分割所有。

通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。

返回分割后的字符串列表。

代码语言:javascript
复制
str1 = "this is a example!"
print(str1.split())          # 以空格为分隔符
print(str1.split('i', 1))   # 以 i 为分隔符
代码语言:javascript
复制
['this', 'is', 'a', 'example!']
['th', 's is a example!']

str.rsplit(str1="", num=string.count(str1))

通过指定分隔符对字符串进行分割并返回一个列表,默认分隔符为所有空字符,包括空格、换行(\n)、制表符(\t)等。

类似于 split() 方法,只不过是从字符串最后面开始分割。

代码语言:javascript
复制
str1 = "this is a example!"
print(str1.rsplit())          # 以空格为分隔符
print(str1.rsplit('i', 1))    # 以 i 为分隔符
print(str1.rsplit('i', 2))    # 以 i 为分隔符
print(str1.rsplit('i', 3))    # 以 i 为分隔符
代码语言:javascript
复制
['this', 'is', 'a', 'example!']
['this ', 's a example!']
['th', 's ', 's a example!']
['th', 's ', 's a example!']

str.splitlines([keepends])

keepends -- 在输出结果里是否去掉换行符('\r', '\r\n', \n'),默认为False,不包含换行符,如果为True,则保留换行符。

按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

代码语言:javascript
复制
str1 = 'ab c\n\nde fg\rkl\r\n'

print(str1.splitlines())
print(str1.splitlines(True))
代码语言:javascript
复制
['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
9 replace()、partition()、rpartition()方法

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

返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。

代码语言:javascript
复制
str1 = "is, is, !"
print(str1.replace("is", "was", 1))
代码语言:javascript
复制
was, is, !

str.partition(substr)

根据指定的分隔符将字符串进行分割。

如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。

str.rpartition(substr)

如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。

类似于 partition() 方法,只是rpartition()方法是从目标字符串的末尾也就是右边开始搜索分割符。

代码语言:javascript
复制
str1 = "www.runoob.com"

print(str1.partition("."))
print(str1.rpartition("."))
代码语言:javascript
复制
('www', '.', 'runoob.com')
('www.runoob', '.', 'com')
10 encode()方法

在 Python 中,有 2 种常用的字符串类型,分别为 str 和 bytes 类型,其中 str 用来表示 Unicode 字符,bytes 用来表示二进制数据。str 类型和 bytes 类型之间就需要使用 encode() 和 decode() 方法进行转换。

str.encode(encoding='UTF-8',errors='strict')

以指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。

encoding -- 要使用的编码,如:UTF-8;

errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引发一个UnicodeError。

该方法返回编码后的字符串,它是一个 bytes 对象。

和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。

注意,对 bytes 类型数据解码,要选择和当初编码时一样的格式。

代码语言:javascript
复制
bytes.decode([encoding="utf-8"][,errors="strict"])
代码语言:javascript
复制
str1 = "菜鸟教程"
str_utf8 = str1.encode("UTF-8")
str_gbk = str1.encode("GBK")

print(str1)
print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk, end="\n\n")

print("UTF-8 解码:", str_utf8.decode('UTF-8', 'strict'))
print("GBK 解码:", str_gbk.decode('GBK', 'strict'))
代码语言:javascript
复制
菜鸟教程
UTF-8 编码:b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
GBK 编码:b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'

UTF-8 解码:菜鸟教程
GBK 解码:菜鸟教程
11 maketrans()、translate()方法

string.maketrans(x[, y[, z]])

用于给 translate() 方法创建字符映射转换表。可以只接受一个参数,此时这个参数是个字典类型(暂不研究这种情况)。

对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串,表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。

在Python3中可以有第三个参数,表示要删除的字符,也是字符串。

S.translate(table)

根据 maketrans() 方法给出的字符映射转换表转换字符串中的字符。

代码语言:javascript
复制
intab = "aeiou"
outtab = "12345"
deltab = "thw"

trantab1 = str.maketrans(intab, outtab)  # 创建字符映射转换表
trantab2 = str.maketrans(intab, outtab, deltab)  # 创建字符映射转换表,并删除指定字符

test = "this is string example....wow!!!"

print(test.translate(trantab1))
print(test.translate(trantab2))
代码语言:javascript
复制
th3s 3s str3ng 2x1mpl2....w4w!!!
3s 3s sr3ng 2x1mpl2....4!!!
12 format()、format_map()方法

template.format(p0, p1, ..., k0=v0, k1=v1, ...)

格式化指定的值,并将其插入字符串的占位符内。

代码语言:javascript
复制
print('{:.2e}'.format(100000000))
print('percentage: {:.2%}'.format(1 / 3))
代码语言:javascript
复制
1.00e+08
percentage: 33.33%

str.format_map(mapping)

在Python3中使用format()和format_map()方法都可以进行字符串格式化,但format()是一种所有情况都能使用的格式化方法,format_map()仅使用于字符串格式中可变数据参数来源于字典等映射关系数据。

format_map()的参数不需传入“关键字=真实值”,而是直接传入真实的字典值。

代码语言:javascript
复制
point = {'x': 4, 'y': -5}
print('x = {x}, y = {y}'.format(**point))
print('x = {x}, y = {y}'.format_map(point))
代码语言:javascript
复制
x = 4, y = -5
x = 4, y = -5
13 isspace()、istitle()、islower()、isupper()方法

str.isspace()

检测字符串是否只由空白字符组成。

str.istitle()

检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

str.isupper()

检测字符串中所有的字母是否都为大写。

str.islower()

检测字符串是否由小写字母组成。

代码语言:javascript
复制
str1 = "       "
print(str1.isspace())

str2 = "This Is String Example...Wow!!!"
print(str2.istitle())

str3 = "THIS IS STRING EXAMPLE....WOW!!!"
print(str3.isupper())

str4 = "runoob example....wow!!!"
print(str4.islower())
代码语言:javascript
复制
True
True
True
True
14 isalpha()、isnumeric()、isalnum()、isdecimal()、isdigit()方法

str.isalpha()

检测字符串是否只由字母或文字组成。

str.isnumeric()

检测字符串是否只由数字组成,数字可以是:Unicode 数字,全角数字(双字节),罗马数字,汉字数字。

str.isalnum()

检测字符串是否由字母和数字组成。

代码语言:javascript
复制
str1 = "runoob菜鸟教程"
print(str1.isalpha())

str2 = "23443434"
print(str2.isnumeric())

str3 = "runoob2016"  # 字符串没有空格
print(str3.isalnum())
代码语言:javascript
复制
True
True
True

str.isdecimal()

检查字符串是否只包含十进制字符。

str.isdigit()

检测字符串是否只由数字组成。

代码语言:javascript
复制
print("234.43434".isdecimal())
print("23443434".isdecimal(), end="\n\n")

print("234.43434".isdigit())
print("23443434".isdigit(), end="\n\n")
代码语言:javascript
复制
False
True

False
True

Main difference between the function str.isdecimal() and str.isdigit() is that: the function str.isdecimal() return True only for numbers from 0 to 9, at the same time the function str.isdigit() return True for some other unicode-supported chars.

15 isascii()、isprintable()、isidentifier()方法

str.isascii()

如果字符串为空或字符串中的所有字符都是 ASCII,则返回 True,否则返回 False。

string.isprintable()

如果所有字符都是可打印的,则返回True,否则返回False。

无法打印的字符如:回车和换行。

S.isidentifier()

判断字符串是否是有效的 Python 标识符,可用来判断变量名是否合法。

代码语言:javascript
复制
print('AaqdKdnwk'.isascii())
print("Hello!\nAre you #1?".isprintable())
print("3a".isidentifier())
代码语言:javascript
复制
True
False
False

参考资料:

[1] Python字符串常用方法详解(http://c.biancheng.net/python/str_method/

[2] Python3 字符串(https://www.runoob.com/python3/python3-string.html

[3] Python 字符串 casefold() 方法(https://www.cjavapy.com/article/1260/

[4] Python rsplit() 方法(https://www.cnblogs.com/wushuaishuai/p/7792874.html

[5] Python3 splitlines()方法(https://www.runoob.com/python3/python3-string-splitlines.html

[6] Python maketrans() 方法(https://www.cnblogs.com/wushuaishuai/p/7687074.html

[7] Python格式化字符串format(http://noahsnail.com/2020/06/18/2020-06-18-Python%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2format/

[8] Python中format_map与format字符串格式化的区别(https://www.codeleading.com/article/39281462864/

[9] str.isdecimal() and str.isdigit() difference example(https://stackoverflow.com/questions/22789392/str-isdecimal-and-str-isdigit-difference-example

[10] Python 3 字符串 isascii( ) 方法(https://blog.csdn.net/qq_41961087/article/details/107703076

[11] Python 字符串 isprintable() 方法(https://www.begtut.com/python/ref-string-isprintable.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 strip()、lstrip()、rstrip()方法
  • 2 center()、ljust()、rjust()、zfill()方法
  • 3 title()、lower()、upper()方法
  • 4 capitalize()、casefold()、swapcase()方法
  • 5 endswith()、startswith()方法
  • 6 find()、rfind()、index()、rindex()方法
  • 7 join()、count()、expandtabs()方法
  • 8 split()、rsplit()、splitlines()方法
  • 9 replace()、partition()、rpartition()方法
  • 10 encode()方法
  • 11 maketrans()、translate()方法
  • 12 format()、format_map()方法
  • 13 isspace()、istitle()、islower()、isupper()方法
  • 14 isalpha()、isnumeric()、isalnum()、isdecimal()、isdigit()方法
  • 15 isascii()、isprintable()、isidentifier()方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档