Python3.2中的字符串函数学习总结


Posted in Python onApril 23, 2015

Sequence Types

sequence类型有六种:strings, byte sequences (bytes objects), byte arrays(bytearray objects), list, tuple, range objects.

sequence类型都支持的通用操作:
成员检查:in、not in
连接:+
复制:*
下标取值:s[i]
切片:s[i : j]
长度检查:len(s)
最小值:min(s)
最大值:max(s)
索引取值:s.index(i)
字符串统计:s.count(i)

String Methods

判断类方法,通常返回一个布尔值:

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

判断字符串是否以指定后缀结尾,返回True或False。start和end指定判断的起始范围,默认全字符串。如:

'abcde'.endswith('de')   -->True

'abcde'.endswith('de', 0, 3)   -->Flase

str.startwith(prefix[, start[, 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。
比较isdecimal()、isdigit()、isnumeric(),几个方法检测的范围依次扩大。

格式化类方法,返回一个格式化的新字符串:

str.encode(encoding=”utf-8”, errors=”strict”):

将字符串以utf-8格式进行编码。

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进行填充,默认为空格。
注:width为偶数时,fillchar将平均地填充到原字符串的开头和结尾;为奇数时,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参数是一个字符串,它包含了所有将要被移除的字符集合。默认为空格。
注:关于lstrip函数(包括rstrip和strip),网上有很多文章,但都讲的不清不楚。它实际的意思是,从原字符串的最左边开始,匹配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]):
与str.lstrip()相反,从最右边开始匹配。

'xyxxyy testyx yx yyx'.rstrip('xy ')   -->'xyxxyy test'

str.strip([chars]):
从字符串的两头开始匹配。

'xyxxyy testyx yx yyx'.strip('xy ')   -->test

str.expandtabs([tabsize]):
把字符串中的所有制表符替换成零个或多个空格,每个制表符替换成多少个空格,由制表符在字符串中的位置和tabsize共同决定。tabsize指定每个制表符替换成的空格数,默认为8个。如:

'\t\t this\tis test.'.expandtabs(8)   -->'                 this    is test.'

上述示例中,前两个\t,每个都替换成了8个空格,而第三个\t貌似只替换成了4个。实际上不然,因为制表符的制表位是从每行开头算起的,所以第三个制表符的制表位是从行首开始的第24个位置,刚好在is的i前面,而不是从this后面开始算的第8个位置。这就是所谓的共同决定。

str.zfill(width):
返回一个长度为width的数字字符串,最左边填充0。如果width小于等于原字符串长度,则返回原字符串。主要用于数字类字符串的格式化。如:

'abc'.zfill(5)   --> '00abc'    //一般不会做这种格式化,没什么意义

'123'.zfill(5)   --> '00123'

查找 & 替换类方法:

str.count(sub[, start[, end]]):

统计某个字符中子字符串sub的个数。start和end指定统计范围,未指定则默认全字符串范围内统计。如:

'abcdabac'.count('ab')   -->2

'abcdabac'.count('ab', 2,)   -->1

str.find(sub[, start[, end]]):
查找子字符串在字符串中出现的第一个位置,start和end指定一个查找范围。未找到返回-1。

'0123234'.find('23')   -->2

'0123234'.find('23', 1)   -->2

注:1、find查找的是子字符串在全字符串中出现的第一个位置,匹配到字符串就结束查找,不管后面还有没有匹配的字符串。
2、find查找的是子字符串在全字符串出现的第一个位置,而不是指定切片中的第一个位置。
3、如果仅想判断子字符串是否在某一字符串中,用in判断符即可,无需find。

str.rfind(sub[, start[, end]]):
跟find方法一样,返回指定子串的index位置,只不过rfind从字符串的最右边开始查找,找不到时返回-1。注意:从最右边开始查找,但index位置却是从原字符串的最左边开始算的。如:

'ABCDEEF'.find('E')   -->4   //从最左边开始查找,从A到第一个D后面的E结束,返回索引值4

'ABCDEEF'.rfind('E')   -->5   //从最右边开始查找,从A到第一个F前面的E结束,返回索引值5

str.format(*args, **kwargs):
调用fortmat方法的字符串中不但有纯文本,也有使用{}界定符包括起来的替换字段。替换字段既可以是位置参数的数值索引,也可以是字典或属性的Key值。该方法返回的字符串里,所有替换字段都被相应参数的值所替代。如:

‘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[, start[, end]]):

类似str.find(),但是如果没有找到子串,返回raised ValueError。

str.rindex(sub[, start[, end]]):

类似于str.rfind(),但是如果没有找到,返回raises ValueError。

str.replace(old, new[, count]):
返回一个新字符串,原串中的old被替换为new,country指定替换次数。如:

'AAABBBCCC'.replace('A', 'D')   -->DDDBBBCCC

'AAABBBCCC'.replace('A', 'D', 2)   -->DDABBBCCC

static str.maketrans(x[, [y, z]]):
这个方法我不是很明白,特别是它还有一个static修饰符。
大致上,它的用途是返回一个转换表,以供str.translate()方法使用,两个方法常配合使用。
如:

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')

"please don't knock at my door!".translate(table)   -->"pleaze dn't knkk at my dr!"   //如果有三个参数,则第三个参数的意思是删除原字符串中的相应字符。

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之后的字符串。
注意”倒数Sep之前的字符串”,这个之前的字符串,是从原字符串的最左边开始算,并不是最右边。如:

'abcdee'.rpartition('e')   --> ('abcde', 'e', '')    //拆分的三个元素分别是:倒数第一个e之前的元素,e本身,e之后的元素,此外为空格

'abcdee'.rpartition('f')   --> ('', '', 'abcdee')    //拆分的三个元素分别是:空格,空格,原字符串

str.split([sep[, maxsplit]]):

返回一个以Sep分隔的列表,maxsplit指定拆分次数(因此,列表中元素的个数为maxsplit + 1)。Sep默认为空格,maxsplit默认不限制拆分次数。
注意:1)如果未指定Sep或指定Sep为None(''),str两端的空格将舍弃;如果指定Sep(不管能否在原字符串中找到Sep),str两端的空格将保留
2)如果未能在原字符串中找到Sep,则返回一个仅包含一个元素的列表,这个元素就是原字符串。
如:

'  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', 'c', 'dbee  ']    //以b为分隔符,拆分两次

注:有点像str.partition(),但是str.partition()返回一个元组,而且分隔符Sep是元组中的一个元素;而str.split(0返回一个列表,分隔符Sep不在列表中

str.rsplit([sep[, maxsplit]]):

与str.split()类似,只是它从最右边开始拆分。只有在指定maxsplit的情况下才会看到效果。如:

'abcbdbee'.rsplit('b')   --> ['a', 'c', 'd', 'ee']     //不指定maxsplit,返回的结果与str.split()相同

'abcbdbee'.rsplit('b', 2)   --> ['abc', 'd', '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 = 'AB\nCD\nEF'

Line.splitlines()   -->['AB', 'CD', 'EF']
Line = 'AB\nCD\nEF'

Line.splitlines(True)   --> ['AB\n', 'CD\n', 'EF']
Python 相关文章推荐
python实现发送邮件功能
Jul 22 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
详解Python 函数如何重载?
Apr 23 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
Python实现对adb命令封装
Mar 06 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
Python学习之包与模块详解
Mar 19 Python
Python与Redis的连接教程
Apr 22 #Python
Python实现的数据结构与算法之快速排序详解
Apr 22 #Python
利用Fn.py库在Python中进行函数式编程
Apr 22 #Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 #Python
Python实现的数据结构与算法之链表详解
Apr 22 #Python
Python实现的数据结构与算法之双端队列详解
Apr 22 #Python
Python实现的数据结构与算法之队列详解
Apr 22 #Python
You might like
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP仿盗链代码
2012/06/03 PHP
php计算函数执行时间的方法
2015/03/20 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
深入浅出webpack之externals的使用
2017/12/04 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python开发之list操作实例分析
2016/02/22 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
长辈证婚人证婚词
2014/01/09 职场文书
单位活动策划方案
2014/08/17 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
市场督导岗位职责
2015/04/10 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android