Python学习资料整理--字符串处理内置方法全集
代码小工蚁整理了python编程语言的字符串处理内置方法。
欢迎转发收藏,方便学习。
用dir命令可获得字符串处理内置方法列表。
>>> dir(str)
['__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', 'e
ncode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isal
num', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric',
'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstr
ip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartitio
n', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase'
, 'title', 'translate', 'upper', 'zfill']
用help(str.方法名)可显示对应方法的帮助信息。
如:help(str.endswith)
字符串处理相关方法:
capitalize 将字符串转换成首字母大写,其余小写。 参数:无 返回:str
title 将每个单词的首字母转成大写,其余小写。参数:无。返回:str
如:
s = 'ant bee cat dog'
s.capitalize() # 返回:Ant bee cat dog
s.title() # 返回:Ant Bee Cat Dog
casefold 全部小写。 参数:无 返回:str
center 在指定宽度中居中。参数:宽度。可选:1个填充字符(默认是空格) 返回:str
*当无法居中时,字符会偏右显示
count 子串在字符串中的出现次数(非重叠次数)。参数:子串。可选:开始,终止位置(不含终止处)。 返回:int
如:
'abccdccdccccd'.count('cc') # 4
'abccdccdccccd'.count('cc',2,9) # 2
encode 对字符串进行编码处理。 参数:可选:编码方式(默认是utf-8),错误处理方式(默认是strict)。 返回:bytes
如:
'代码小工蚁antspi.com'.encode('gbk') # b'\xb4\xfa\xc2\xeb\xd0\xa1\xb9\xa4\xd2\xcfantspi.com'
errors = 'strict' 或者 'ignore','replace','xmlcharrefreplace','backslashreplace’等多种方式。
错误处理方式见:链接的Error Handlers部分
https://docs.python.org/3/library/codecs.html#error-handlers
编码方式见:Standard Encodings部分
https://docs.python.org/3/library/codecs.html#standard-encodings
说明:str.encode编码之后,类型变成:bytes。可用bytes.decode()解码
bytes.decode(encoding=编码方式, errors=错误处理方式)
encoding编码方式默认是'utf-8'。另外还有:'gbk','gb2312'等多种。编码方式要一致,确保解码成功,否则结果是乱码或出现异常UnicodeDecodeError。
errors错误处理方式默认是'strict'。另外还有:'ignore','replace','xmlcharrefreplace'
如:
m = '人生苦短,我用Python'.encode('gbk')
print(m.decode('gbk'))
print(m.decode('gb2312')) # 此例用gb2312也能正常解码
print(m.decode('utf-8')) # 会出错!
endswith 是否以指定后缀结尾。 参数:后缀字符串(也可以是字符串元组)。可选:开始,终止位置(不含终止处)。返回:布尔值
如:'aabbcc//dd//'.endswith('//',2,8) # True
startswith 是否以指定前缀开头。参数:前缀字符串(也可以是字符串元组)。可选:开始,终止位置(不含终止处)。返回:布尔值
如:'Python'.startswith('Py') # True
expandtabs 将tab字符用空格来扩展(或收缩)。参数:可选空格数(默认是一个tab对应8个空格)。返回:str
如:'ab\tcd\tef'.expandtabs(12)
find在字符串中查找子串。参数:子串。可选:开始,终止位置(不含终止处)。返回:int
如:
m = 'IloveChinaIlovePythonIloveAntspi'
m.find('love') # 1 (返回的是最小索引值lowest index)
m.find('love',5,14) # -1(表示没有找到)
rfind()与find()类似,返回的是最高索引值highest index,相当于右侧开始查找。
如:m.rfind('love') # 22
index 查找子串,与find类似,当子串不存在时,抛出ValueErro异常。返回:int
rindex 查找子串,与rfind类似,当子串不存存时,抛出ValueError异常。返回:int
如果只是想知道指定的子串是否存在于字符串中,可以直接使用in操作符。
如:'py' in 'I love python' # True
format 字符串格式化。使用{}或{keywords}来表示替换参数。返回:str
如:
"My name is {},I'm {age} old.".format('Jack',age=66)
# "My name is Jack,I'm 66 old."
format_map 字符串格式化(使用映射数据mapping字典)。参数:映射数据mapping。返回:str
如:
dict = {'name':'Antspi','address':'Wenzhou'}
'My name is {name},from {address}'.format_map(dict)
# 'My name is Antspi,from Wenzhou'
isalnum 判断字符串是否仅包含数字或字母(包括汉字),字符串至少要有一个字符。参数:无。返回:布尔值
如:
'代码小工蚁'.isalnum() # True
'antspi.com'.isalnum() # False
'A+B'.isalnum() # False
Unicode Table
http://www.tamasoft.co.jp/en/general-info/unicode.html
isalpha 判断字符串是否只包含字母(包括汉字),字符串至少要有一个字符。参数:无。返回:布尔值
如:
'代码小工蚁'.isalpha() # True
'abc'.isalpha() # True
'123'.isalpha() # False
isdecimal 判断字符串是否只包含十进制数,字符串至少要有一个字符。参数:无。返回:布尔值
(数字,全角数字也可以)为真。出现小数点、空格即为假。
如:
'520'.isdecimal() # True
'123.4'.isdecimal() # False
'壹'.isdecimail() # False
isdigit 判断字符串是否只包含数字,字符串至少要有一个字符。参数:无。返回:布尔值
(数字,全角数字也可以)为真。出现小数点、空格即为假。
如:
n = '123'
n.isdigit() # True
isidentifier 是否是系统关键字。参数:无。返回:布尔值
如:'print'.isidentifier() # True
islower 是否小写。至少一个字符。参数:无。返回:布尔值
isupper 是否大写。至少一个字符。参数:无。返回:布尔值
如:
'abc123'.islower() # True
'ANTSPI.COM'.isupper() # True
isnumeric 是否全是数字(全角数字,中文:一四、壹万)。参数:无。返回:布尔值
如:
'1万二仟'.isnumeric() # True
isprintable 是否可打印字符(空串,中文)。参数:无。返回:布尔值
如:
''.isprintable() # True
'\t'.isprintable() # False
'代码小工蚁antspi'.isprintable() # True
isspace 是否为空白(空格、\t、\n)。至少一个字符。参数:无。返回:布尔值
如:
' '.isspace() # True
'\n'.isspace() # True
''.isspace() # 空串为False
istitle 判断每个英文单词是否首字母大写,其余小写。参数:无。返回:布尔值
'I Love Python'.istitle() # True
''.istitle() # False
'中国人'.istitle() #False
join 可迭代对象的字符串拼接。参数:可迭代对象。对象之间的分隔符为指定字符串(也可以是空串)。返回:str
格式:分隔符.join(可迭代对象)
如:
m = ['abc','def','ghi','2017']
print('/'.join(m)) # 得到:abc/def/ghi/2017
ljust Unicode字符串按指定宽度左对齐,空余部分用指定填充字符填充(可选参数,默认是空格)。返回:str
格式:字符串.ljust(宽度,填充字符)
rjust 字符串右对齐。使用方法同ljust。返回:str
如:
my_address = '浙江温州'
print(my_address.ljust(20,'@')) # 浙江温州@@@@@@@@@@@@@@@@
print(my_address.rjust(20,'@')) # @@@@@@@@@@@@@@@@浙江温州
lower 字母小写。参数:无。返回:str
upper 字母大写。参数:无。返回:str
如:
s = 'I love PYthon'
print(s.lower()) # i love python
print(s.upper()) # I LOVE PYTHON
s.lower() 与 s.casefold() 功能一样,都是全部小写。
maketrans()与translate()联合使用
maketrans 设置字符转换表(translation table)
translate 字符转换(可以字符替换,也可删除字符)。参数:字符转换表。返回:str
格式1:''.maketrans(映射字典)
如:
# 映射字典:叶字映射成繁体字葉,字母a转换成字母F,小写的x映射成大写X
# 小写字母x的Unicode序数为120,大写X对应为88。可以用ord('x')来查看
t_dict = {'叶':'葉','a':'F',120:88}
mk_table = ''.maketrans(t_dict)
# 返回类型是dict。{21494: '葉', 97: 'F', 120: 88}
# 相应字典的键会转换成Unicode序数
s = '秋天的树叶ahenghao xxx'
print(s.translate(mk_table)) # 转换后得到:秋天的树葉FhenghFo XXX
格式2:''.maketrans(字符表1,字符表2)
要求:两个字符表长度要一致,转换时会逐个字符对应转换。
如:
s1 = 'abcdefghijklmnopqrstuvwxyz'
s2 = 'ijklmnopqrstuvwxyzabcdefgh'
table = ''.maketrans(s1,s2)
p = 'God bless you'.lower()
print(p.title()) # God Bless You
e = p.translate(table)
print(e.title()) # Owl Jtmaa Gwc
此例是一个简单的加密示例。
将映射表互换后,就可以将密文e转换成明文p
table2 = ''.maketrans(s2,s1)
print(e.translate(table2).title()) # God Bless You
格式3:''.maketrans(字符表1,字符表2,要删除的字符串)
如:
s1 = '恨'
s2 = '爱'
del_char = 'hate'
table = ''.maketrans(s1,s2,del_char)
p = '恨你一生 hate you'
e = p.translate(table)
print(e) # 爱你一生 you
partition 从左侧开始,按指定的分割符分割字符串。参数:分割字符串。返回:tuple元组(三项)
rpartition 从右侧开始分割字符串。参数:分割字符串。返回:tuple元组(三项)
如:
m = 'I love China, I love python, I love you.'
head, sep, tail = m.partition(', ')
print(head) # I love China
print(sep) # ,
print(tail) # I love python, I love you.
# 如果未找分割字符串,则返回head为整个字符串,sep与tail为空串。
# 从右侧开始分割字符串
head, sep, tail = m.rpartition(', ')
print(head) # I love China, I love python
print(sep) # ,
print(tail) # I love you.
# 如果未找分割字符串,则返回head与sep为空串,tail为整个字符串。
replace 字符串替换。参数:原子串,新子串。可选:替换次数。返回:str
如:
m ='I love China, I love python, I love you.'
p = m.replace('I','You',2)
print(p) # You love China, You love python, I love you.
str.replace()方法使用广泛,要熟练掌握。
对比:
translate是按字符映射关系转换,每个字符只要出现都会被替换成对应的字符。映射表由maketrans()设置。
replace是字符串替换,两个字符串参数长度可以不同,也能控制替换次数。新子串如果是空串,则起到删除字符的作用。
lstrip 去除左边前导空白字符(whitespace),默认是空格、\t\n。参数:可选,指定要去除的字符。返回:str
rstrip 去除右边空白字符
strip 去除左右两边空白字符
注意:字符串中间的空白字符无法去除。(可以用replace方法实现)
如:
m = ' abc def\t\n '
print(m.lstrip()) # 注意返回变化:abc def及跳格、换行和三个空格
print(m.rstrip()) # 前导三个空格依然存在: abc def
print(m.strip()) # abc def 此时中间空格依然存在
n = 'pythonpython.py'
print(n.strip('p')) # ythonpython.py
print(n.strip('py')) # thonpython.
rsplit 按指定的分割符,从右侧开始分割字符串。参数:可选分割符(默认是空白字符),可选最多分割次数(默认是maxsplit=-1
,即全部分割)。返回:列表
split 从左侧开始分割字符串。参数同rsplit。返回:列表
splitlines 按行(\r,\r\n,\n)分割。参数:可选(默认不包含分行符),指定为True则包含分行符。返回:列表
如:
m = 'Python \nis an ea\tsy to learn, \npowerful \r\nprogramming language.'
print(m.rsplit()) # ['Python', 'is', 'an', 'ea', 'sy', 'to', 'learn,', 'powerful', 'programming', 'language.']
print(m.rsplit('\n',maxsplit=2)) #['Python \nis an ea\tsy to learn, ', 'powerful \r', 'programming language.']
print(m.split('a',maxsplit=3)) #['Python \nis ', 'n e', '\tsy to le', 'rn, \npowerful \r\nprogramming language.']
print(m.splitlines()) #['Python ', 'is an ea\tsy to learn, ', 'powerful ', 'programming language.']
print(m.splitlines(True)) #['Python \n', 'is an ea\tsy to learn, \n', 'powerful \r\n', 'programming language.']
swapcase 大小写互换(大写变小写,小写变大写)。参数:无。返回:str
如:
m = 'pyTHON'
print(m.swapcase()) # PYthon
zfill 按指定宽度在字符串左侧填充0字符。参数:宽度。返回:str
注意:如果指定宽度小于字符串本身长度,此时并不会裁掉字符串本身。
如:
m = 'abcd'
m.zfill(15) # 00000000000abcd
说明:以上示例在Win7 64位系统,python 3.6.1环境中运行通过。
最后更新日期:2017-12-10
关于whitespace空白字符
在程序设计中,空白是在排版中表示水平或垂直空间的字符或字符序列。
显示时空白并不是一个可见的标记,但通常会占用页面上的空间。
最常见的空白符是空格(ASCII码为32)。在西方文字中,空格用作单词的分隔。[1]
统一码字符数据库(Unicode Character Database)中定义25个空白字符。
python中的whitespace是指:space, tab, linefeed, return, formfeed, and vertical tab等6个ASCII字符。[2]
space空格(chr(32))
character tabulation制表符(chr(9)或\t)
linefeed换行(chr(10)或\n)
carriage return回车(chr(13)或\r)
form feed进纸(chr(12)或\f)
line tabulation垂直制表符vertical tab(chr(11)或\v)
以上信息可以通过以下操作查看(字符串常量):
import string
print(string.whitespace)
string.ascii_letters 相当于 ascii_lowercase + ascii_uppercase
string.ascii_lowercase 即 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase 即 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits 即 '0123456789'
string.hexdigits 即 '0123456789abcdefABCDEF'
string.octdigits 即 '01234567'
string.punctuation 即 '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
string.whitespace 即 ' \t\n\r\x0b\x0c'
string.printable == string.digits + string.ascii_lowercase+string.ascii_uppercase+ string.punctuation+string.whitespace
参考:
[1] https://en.wikipedia.org/wiki/Whitespace_character#Unicode
[2] https://docs.python.org/3/library/string.html?highlight=whitespace#string.whitespace