Python3.2中的字符串函数学习总结
Sequence Types sequence类型有六种:strings,byte sequences (bytes objects),byte arrays(bytearray objects),list,tuple,range objects. sequence类型都支持的通用操作: String Methods 判断类方法,通常返回一个布尔值: 复制代码 代码如下: 'abcde'.endswith('de') -->True 'abcde'.endswith('de',3) -->Flase str.startwith(prefix[,end]]): 与str.endwith()相反,判断字符串是否以指定前缀开始。 str.islower(): 判断字符串中的字母字符是否全部为小写,该方法仅判断字符串中的字母字符,不理会其它字符。字符串必须至少包含一个字母字符,否则返回False。如: 复制代码 代码如下: ‘中国'.islower() -->False ‘ab中国'.islower() -->True str.isupper(): 与st.islower()方法相反,判断所有字母字符是否全部大写。 str.istitle(): 判断字符串每个单词的首字母是否大写。字符串必须至少包含一个字母字符,否则返回False。即使首字母字符前面有非字母字符,如中文、数字、下划线等,也不影响对首字母字符的判断。 复制代码 代码如下: ‘中国'.istitle() -->False //字符串不包含字母,返回False ‘中国Abc'.istitle() -->True //虽然首字母字符A前面有非字母字符,仍然返回True ‘-Abc xyz'.istitle() -->False //后一个单词的首字母不是大写,返回False str.isalnum(): 判断字符串是否只包含由文字数字式字符,字符串仅包含中文字符合法。若字符串包含空格、下划线、~等非文字数字式字符,均返回False。如: 复制代码 代码如下: ‘3'.isalnum() -->True ‘中国'.isalnum() -->True ‘-'.isalnum() -->False 注:alphanumberic是一个特殊词汇,它表明这个字符串由数字字符或文字字符组成。如,'3'包括了一个数字字符,'a'包含了一个文字字符,而'3a'同时包括数字字符和字母字符。 str.isalpha(): 复制代码 代码如下: ‘中国'.isalpha() -->True ‘3'.isalpha() -->False str.isidentifier(): 判断字符串是否是合法的标识符,字符串仅包含中文字符合法,实际上这里判断的是变量名是否合法。如: 复制代码 代码如下: ‘_a'.isidentifier() -->True ‘3a'.isidentifier() -->False ‘中国'.isidentifier() -->True str.isprintable(): 判断字符串所包含的字符是否全部可打印。字符串包含不可打印字符,如转义字符,将返回False。 str.isspace(): 判断字符串是否仅包含空格或制表符。注意:空格字符与空白是不同的,如: 复制代码 代码如下: ''.isspace() -->False ' '.isspace() -->True str.isdecimal(): 判断字符串是否只包含十进制数字字符,包括多国语言的十进制数字字符表现形式。如: 复制代码 代码如下: ‘3'.isdecimal() -->True ‘u0660'.isdeciaml() -->True 其它语言的十进制数字形式参考:http://www.fileformat.info/info/unicode/category/Nd/list.htm str.isdigit(): 判断字符串是否只包含数字,这里的数字包括十进制数字和其它特殊数字(如上标数字等)。一般地,一个数字是拥有如下属性值的字符:Numeric_Type=Digit或Numeric_Type=Decimal。 str.isnumeric(): 判断字符串是否只包含数字字符。数字字符范围很大,一般来说,数字字符是拥有如下属性值的字符:Numeric_Type=Digit,Numeric_Type=Decimal或Numeric_Type=Numeric。
str.encode(encoding=”utf-8”,errors=”strict”): str.lower(): 把全部字母字符转换成小写,不去管其它非字母字符。字符串全部为非字母字符也是合法的,但返回原字符串。如: 复制代码 代码如下: '中国123ABC'.lower() --> '中国123abc' ‘中国123'.lower() -->'中国123' //不会报错,返回原字符串 str.upper(): 与str.lower()相反,把全部字母字符转换成大写。如: 复制代码 代码如下: '中国123abc'.upper() --> '中国123ABC' '中国123'.upper() -->'中国123' str.swapcase(): 把字符串中的大小写字母互换,大写转换成小写,小写转换成大写。不去管非字母类字符。如: 复制代码 代码如下: '中国123Ab'.swapcase() -->'中国123aB' '中国123'.swapcase() -->'中国123' //不会报错,返回原字符串 str.capitalize(): 字符串首字母大写,其余小写。如果字符串首字符为非字母字符,将返回原字符串。字符串仅包含非字母字符合法,但返回原字符串。如: 复制代码 代码如下: 'ab cd'.capitalize() -->'Ab cd' //只转换字符串的首字母 '中国ab 123cd'.capitalize() -->'中国ab 123cd' //首字符为非字母字符,返回原字符串 '中国 123'.capitalize() -->'中国 123' //不会报错,返回原字符串 str.title(): 字符串中每个单词的首字母大写,其余小写。单词的首字符为非字母字符也不影响转换。字符串仅包含非字母字符合法,但返回原字符串。如: 复制代码 代码如下: 'ab cd'.title() -->'Ab Cd' //字符串中每个单词的首字母大写 '中国ab 123cd'.title() -->'中国Ab 123Cd' //即使首字符为非字母字符,也可以进行转换 '中国 123'.title() -->'中国 123' str.center(width[,fillchar]): 返回一个原字符串居中,长度为width的新字符串,width要大于len(str),否则返回原字符串,原字符串开头和结尾处使用fillchar进行填充,默认为空格。 复制代码 代码如下: 'abcd'.center(3) -->'abcd' 'abcd'.center(8) -->' abcd ' 'abcd'.center(8,*) -->'**abcd**' 'abcd'.center(7,*) -->'**abcd*' str.ljust(width[,fillchar]): 返回一个长度为width,左对齐的字符串,最右边填充fillchar,默认为空格。width要大于len(str),否则返回原字符串。如: 复制代码 代码如下: ‘abcd'.ljust(10) -->'abcd ‘ str.rjust(width[,fillchar]): 与str.ljust()类似,但是它返回一个右对齐的字符串,最左边填充fillchar。 str.lstrip([chars]): 返回一个去除前了导字符的新字符串,chars参数是一个字符串,它包含了所有将要被移除的字符集合。默认为空格。 复制代码 代码如下: ‘www.example.com'.lstrip(‘cmowz.') -->example.com 从字符串的最左边开始匹配,直至遇到了非chars字符e为止,一共匹配了3个w字符和一个.字符,遇到e匹配结束。 复制代码 代码如下: 'xyxxyy testyx yx yyx'.lstrip('xy ') -->'testyx yx yyx' 从字符串的最左边开始匹配,直至遇到非chars字符t为止,一共匹配了三个x三个y,和一个空格,遇到t匹配结束。 str.rstrip([chars]): 复制代码 代码如下: 'xyxxyy testyx yx yyx'.rstrip('xy ') -->'xyxxyy test' str.strip([chars]): 复制代码 代码如下: 'xyxxyy testyx yx yyx'.strip('xy ') -->test str.expandtabs([tabsize]): 复制代码 代码如下: 'tt thistis test.'.expandtabs(8) -->' this is test.' 上述示例中,前两个t,每个都替换成了8个空格,而第三个t貌似只替换成了4个。实际上不然,因为制表符的制表位是从每行开头算起的,所以第三个制表符的制表位是从行首开始的第24个位置,刚好在is的i前面,而不是从this后面开始算的第8个位置。这就是所谓的共同决定。 str.zfill(width): 复制代码 代码如下: 'abc'.zfill(5) --> '00abc' //一般不会做这种格式化,没什么意义 '123'.zfill(5) --> '00123' 查找 & 替换类方法: 复制代码 代码如下: 'abcdabac'.count('ab') -->2 'abcdabac'.count('ab',2,) -->1 str.find(sub[,end]]): 复制代码 代码如下: '0123234'.find('23') -->2 '0123234'.find('23',1) -->2 注:1、find查找的是子字符串在全字符串中出现的第一个位置,匹配到字符串就结束查找,不管后面还有没有匹配的字符串。 2、find查找的是子字符串在全字符串出现的第一个位置,而不是指定切片中的第一个位置。 3、如果仅想判断子字符串是否在某一字符串中,用in判断符即可,无需find。 str.rfind(sub[,end]]): 复制代码 代码如下: 'ABCDEEF'.find('E') -->4 //从最左边开始查找,从A到第一个D后面的E结束,返回索引值4 'ABCDEEF'.rfind('E') -->5 //从最右边开始查找,从A到第一个F前面的E结束,返回索引值5 str.format(*args,**kwargs): 复制代码 代码如下: ‘User ID: {0}'.format(‘root') -->User ID: root ‘User ID: {UID} Last login: {last_login}'.format(UID = ‘root',last_login = ‘5 Mar 2012') -->User ID: root Last login: 5 Mar 2012 str.index(sub[,end]]): 类似str.find(),但是如果没有找到子串,返回raised ValueError。 str.rindex(sub[,end]]): 类似于str.rfind(),但是如果没有找到,返回raises ValueError。 str.replace(old,new[,count]): 复制代码 代码如下: 'AAABBBCCC'.replace('A','D') -->DDDBBBCCC 'AAABBBCCC'.replace('A','D',2) -->DDABBBCCC static str.maketrans(x[,[y,z]]): 复制代码 代码如下: table = str.maketrans('cs','kz') "please don't knock at my door!".translate(table) -->"pleaze don't knokk at my door!" //'c'被替换成了k,'s'被替换成了z。说明参数可以包含多个字符,但第一个参数包含的字符数和第二个参数包含的字符数必须相等。 table = str.maketrans('cs','kz','o') str.translate(map): 和str.maketrans()函数配合使用,替换相应的字符。
str.partition(sep): 该方法用于拆分字符串,返回一个包含三个元素的元组。如果未能在原字符串中找到Sep,则元组的三个元素为:原字符串,空串,空串;否则,从原字符串中遇到的第一个Sep字符开始拆分,元组的三个元素为:Sep之前的字符串,Sep字符,Sep之后的字符串;如: 复制代码 代码如下: 'abcdee'.partition('f') --> ('abcdee','','') 'abcdee'.partition('e') --> ('abcd','e','e') str.rpartition(sep): 与str.partition()相反,从原字符串的最右边开始拆分,但是同样返回包含三个元素的元组:倒数第一个Sep之前的字符串,Sep字符,Sep之后的字符串。 复制代码 代码如下: 'abcdee'.rpartition('e') --> ('abcde','') //拆分的三个元素分别是:倒数第一个e之前的元素,e本身,e之后的元素,此外为空格 'abcdee'.rpartition('f') --> ('','abcdee') //拆分的三个元素分别是:空格,空格,原字符串 str.split([sep[,maxsplit]]): 返回一个以Sep分隔的列表,maxsplit指定拆分次数(因此,列表中元素的个数为maxsplit + 1)。Sep默认为空格,maxsplit默认不限制拆分次数。 复制代码 代码如下: ' abcbdbee '.split() --> ['abcbdbee'] //未指定Sep,返回仅包含一个元素的列表,舍弃str两端的空格 ' abcbdbee '.split('f') --> [' abcbdbee '] //指定f为Sep(虽然找不到f),返回仅包含一个元素的列表,保留两端的空格 ' abcbdbee '.split('b') --> [' a','c','d','ee '] //指定b为Sep,不限定拆分次数,str两端的空格被保留 ' abcbdbee '.split('b',2) --> [' a','dbee '] //以b为分隔符,拆分两次 注:有点像str.partition(),但是str.partition()返回一个元组,而且分隔符Sep是元组中的一个元素;而str.split(0返回一个列表,分隔符Sep不在列表中 str.rsplit([sep[,maxsplit]]): 与str.split()类似,只是它从最右边开始拆分。只有在指定maxsplit的情况下才会看到效果。如: 复制代码 代码如下: 'abcbdbee'.rsplit('b') --> ['a','ee'] //不指定maxsplit,返回的结果与str.split()相同 'abcbdbee'.rsplit('b',2) --> ['abc','ee'] //可以看出与str.split(‘b',2)的差别 str.join(iterable): 使用连接符str来连接iterable对象中的元素,返回一个被str连接起来的,由iterable对象的元素组成的字符串。如果传入一个非iterable对象,如整数、布尔值等,将返回Type Error。 如: 复制代码 代码如下: ‘A B'. join(['1','2','中国']) -->1A B2A B中国 ‘A B'.join(‘12中国') -->1A B2A B中国 ‘A B'.join(123) -->Type Error 注:iterable object或iterator type最主要的特征是支持两个函数:__iter__()和__next__(),虽然不是很准确,但可以简单的认为支持使用for语句逐个取值的数据类型都是迭代器对象。 sequence type(六种:strings、byte objects、byte arrays、lists、tuples、range objects)和dictionary都属于iterable对象。 str.splitlines([keepends]): 拆分一个包含多行的字符串,以每行为一个元素返回一个列表。如果字符串不是多行的,则返回原字符串。keepends是一个True字符或非零整数,表示保留行尾标志。该方法多用于处理文件。如: 复制代码 代码如下: Line = ‘AB CD EF''' Line.splitlines() -->['AB','CD','EF'] Line = 'ABnCDnEF' Line = 'ABnCDnEF' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |