Python 的内置字符串方法小结
字符串处理是非常常用的技能,但 Python 内置字符串方法太多,常常遗忘,为了便于快速参考,特地依据 Python 3.5.1 给每个内置方法写了示例并进行了归类,便于大家索引。 PS: 可以点击概览内的绿色标题进入相应分类或者通过右侧边栏文章目录快速索引相应方法。 大小写转换 str.capitalize() 将首字母转换成大写,需要注意的是如果首字没有大写形式,则返回原字符串。 'adi dog'.capitalize() 'abcd 徐'.capitalize() '徐 abcd'.capitalize() 'ß'.capitalize() str.lower() 将字符串转换成小写,其仅对 ASCII 编码的字母有效。 'DOBI'.lower() 'ß'.lower() # 'ß' 为德语小写字母,其有另一种小写 'ss', lower 方法无法转换 '徐 ABCD'.lower() str.casefold() 将字符串转换成小写,Unicode 编码中凡是有对应的小写形式的,都会转换。 'DOBI'.casefold() 'ß'.casefold() #德语中小写字母 ß 等同于小写字母 ss, 其大写为 SS str.swapcase() 对字符串字母的大小写进行反转。 '徐Dobi a123 ß'.swapcase() u'xb5' u'xb5'.swapcase() u'xb5'.swapcase().swapcase() hex(ord(u'xb5'.swapcase().swapcase())) 这里 'Μ'(是 mu 不是 M) 的小写正好与 'μ' 的写法一致。 str.title() 将字符串中每个“单词”首字母大写。其判断“单词”的依据则是基于空格和标点,所以应对英文撇好所有格或一些英文大写的简写时,会出错。 'Hello world'.title() '中文abc def 12gh'.title() # 但这个方法并不完美: str.upper() 将字符串所有字母变为大写,会自动忽略不可转成大写的字符。 '中文abc def 12gh'.upper() 字符串格式输出 str.center(width[,fillchar]) '12345'.center(10,'*') '12345'.center(10) 返回指定长度的字符串,字符串内容居左(右)如果长度小于字符串长度,则返回原始字符串,默认填充为 ASCII 空格,可指定填充的字符串。 'dobi'.ljust(10) 'dobi'.ljust(10,'~') 'dobi'.ljust(3,'~') 'dobi'.ljust(3) 用 '0' 填充字符串,并返回指定宽度的字符串。 "42".zfill(5) 'dd'.zfill(5) '--'.zfill(5) ' '.zfill(5) ''.zfill(5) 'dddddddd'.zfill(5) tab = '1t23t456t7890t1112131415t161718192021' tab.expandtabs() tab.expandtabs(4) 格式化字符串的语法比较繁多,官方文档已经有比较详细的 examples,这里就不写例子了,想了解的童鞋可以直接戳这里 Format examples. str.format_map(mapping) 类似 str.format(*args,**kwargs) ,不同的是 mapping 是一个字典对象。 People = {'name':'john','age':56} 'My name is {name},i am {age} old'.format_map(People) 字符串搜索定位与替换 str.count(sub[,start[,end]]) text.count('e') text.count('e',5,11) text.count('e',10) text.find('er') text.find('to') text.find('er',3) text.find('er',4) text.find('er',4,21) text.find('er',22) text.rfind('er') text.rfind('er',20) text.rfind('er',20,21) str.replace(old,new[,count]) 'dog wow wow jiao'.replace('wow','wang',1) 'dog wow wow jiao'.replace('wow',0) 'dog wow wow jiao'.replace('wow',2) 'dog wow wow jiao'.replace('wow',3) ' dobi '.rstrip() ' dobi '.strip() a = 'dobi' ord('a') hex(ord('狗')) b = {'d':'dobi',111:' is ','b':97,'i':'u72d7u72d7'} a.translate(table) 如果 maktrans 有两个参数,则两个参数形成映射,且两个字符串必须是长度相等;如果有第三个参数,则第三个参数也必须是字符串,该字符串将自动映射到 None: a = 'dobi is a dog' table = str.maketrans('dobi','alph') a.translate(table) table = str.maketrans('dobi','alph','o') a.translate(table) 字符串的联合与分割 str.join(iterable) 用指定的字符串,连接元素为字符串的可迭代对象。 '-'.join(['2012','3','12']) '-'.join([2012,3,12]) '-'.join(['2012',b'12']) #bytes 为非字符串 '-'.join(['2012']) '-'.join([]) '-'.join([None]) '-'.join(['']) ','.join({'dobi':'dog','polly':'bird'}) ','polly':'bird'}.values()) 'dog wow wow jiao'.partition('dog') 'dog wow wow jiao'.partition('jiao') 'dog wow wow jiao'.partition('ww') 'dog wow wow jiao'.rpartition('wow') 'dog wow wow jiao'.rpartition('dog') 'dog wow wow jiao'.rpartition('jiao') 'dog wow wow jiao'.rpartition('ww') '1,maxsplit=1), '1,3'.rsplit(',maxsplit=1) '1 2 3'.split(),'1 2 3'.rsplit() '1 2 3'.split(maxsplit=1),'1 2 3'.rsplit(maxsplit=1) ' 1 2 3 '.split() '1,'.split(','.rsplit(',') ''.split() 字符串以行界符为分隔符拆分为列表;当 keepends 为True,拆分后保留行界符,能被识别的行界符见官方文档。 'ab cnnde fgrklrn'.splitlines() "".splitlines(), ''.split('n') #注意两者的区别 字符串条件判断 str.endswith(suffix[,end]]); str.startswith(prefix[,end]]) text.endswith('ing') text.endswith(('gin','ing')) text.endswith('ter',4) str.isalnum() 字符串和数字的任意组合,即为真,简而言之: 只要 c.isalpha(),c.isdecimal(),c.isdigit(),c.isnumeric() 中任意一个为真,则 c.isalnum() 为真。 'dobi'.isalnum() 'dobi123'.isalnum() '123'.isalnum() '徐'.isalnum() 'dobi_123'.isalnum() 'dobi 123'.isalnum() '%'.isalnum() 'dobi'.isalpha() 'do bi'.isalpha() 'dobi123'.isalpha() '徐'.isalpha() isdecimal: Nd, digit 与 decimal 的区别在于有些数值字符串,是 digit 却非 decimal ,具体戳 这里 num = 'u2155' num = 'u00B2' num = "1" #unicode num = "'Ⅶ'" num = "十" num = b"1" # byte 判断字符串是否可为合法的标识符。 'def'.isidentifier() 'with'.isidentifier() 'false'.isidentifier() 'dobi_123'.isidentifier() 'dobi 123'.isidentifier() '123'.isidentifier() 'ß'.islower() #德语大写字母 'a徐'.islower() 'ss'.islower() '23'.islower() 'Ab'.islower() str.isprintable() 判断字符串的所有字符都是可打印字符或字符串为空。Unicode 字符集中 “Other” “Separator” 类别的字符为不可打印的字符(但不包括 ASCII 的空格(0x20))。 'dobi123'.isprintable() 'dobi123n'.isprintable() 'dobi 123'.isprintable() 'dobi.123'.isprintable() ''.isprintable() str.isspace() 判断字符串中是否至少有一个字符,并且所有字符都是空白字符。 In [29]: 'rnt'.isspace() In [30]: ''.isspace() In [31]: ' '.isspace() str.istitle() 判断字符串中的字符是否是首字母大写,其会忽视非字母字符。 'How Python Works'.istitle() 'How Python WORKS'.istitle() 'how python works'.istitle() 'How Python Works'.istitle() ' '.istitle() ''.istitle() 'A'.istitle() 'a'.istitle() '甩甩Abc Def 123'.istitle() 'DOBI'.isupper() 'Dobi'.isupper() 'DOBI123'.isupper() 'DOBI 123'.isupper() 'DOBIt 123'.isupper() 'DOBI_123'.isupper() '_123'.isupper() 字符串编码 str.encode(encoding="utf-8",errors="strict") fname = '徐' fname.encode('ascii') fname.encode('ascii','replace') fname.encode('ascii','ignore') fname.encode('ascii','xmlcharrefreplace') fname.encode('ascii','backslashreplace') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |