Python学习资料--字符串处理内置方法全集

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容