一、python string 概述

string在任何大部分编程语言里都是一个基础组成部分,python也不例外 。python 语言中同时还有一个string模块,该模快在python的发展中已经经历了一个历史轮回。在最开始的时候,python有一个专门的string的module,要使用string的方法要先import,但后来由于众多的python使用者 的建议,从python2.0开始, string方法改为用S.method()的形式调用,只要S是一个字符串对象就可以这样使用,而不用import。同时为了保持向后兼容,现在的 python中仍然保留了一个string的module,其中定义的方法与S.method()是相同的,这些方法都最后都指向了用S.method ()调用的函数。要注意,S.method()能调用的方法比string的module中的多,比如isdigit()、istitle()等就只能用 S.method()的方式调用。

为了便于说明,这里举例看下s.method()方式与import string方式

 1puppet@361way:~$ python
 2Python 2.7.3 (default, Sep 26 2013, 20:03:06)
 3[GCC 4.6.3] on linux2
 4Type "help", "copyright", "credits" or "license" for more information.
 5>>> a="abcdefg"
 6//S.method()直接调用
 7>>> a.upper()
 8'ABCDEFG'
 9//导入string模块的用法
10>>> string.upper(a)
11Traceback (most recent call last):
12  File "<stdin>", line 1, in <module>
13NameError: name 'string' is not defined
14>>> import string
15>>> string.upper(a)
16'ABCDEFG'
17//查看模块及其内部函数帮助
18>>> help(string)
19>>> help(string.find)

二、string 函数与方法

string的基本操作符:

1len(str)                #串长度
2cmp("my friend", str)   #字符串比较。第一个大,返回1,第二个大返回 -1,两者相等返回 0
3max('abcxyz')           #寻找字符串中最大的字符
4min('abcxyz')           #寻找字符串中最小的字符
5+                       #连接2个序列
6*                       #重复序列元素
7in                      #判断元素是否存在于序列中

string模块提供的方法有:

 1字符串中字符大小写的变换:
 2S.lower() #小写
 3S.upper() #大写
 4S.swapcase() #大小写互换
 5S.capitalize() #首字母大写
 6字符串在输出时的对齐:
 7S.ljust(width,[fillchar])   #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
 8S.rjust(width,[fillchar])   #右对齐
 9S.center(width, [fillchar]) #中间对齐
10S.zfill(width)              #把S变成width长,并在右对齐,不足部分用0补足
11字符串中的搜索和替换:
12S.find(substr, [start, [end]])
13#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
14S.index(substr, [start, [end]])
15#与find()相同,只是在S中没有substr时,会返回一个运行时错误
16S.rfind(substr, [start, [end]])
17#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
18S.rindex(substr, [start, [end]])
19S.count(substr, [start, [end]])   #计算substr在S中出现的次数
20S.replace(oldstr, newstr, [count])
21#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
22S.strip([chars])                  #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
23S.lstrip([chars])
24S.rstrip([chars])
25S.expandtabs([tabsize])           #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个
26字符串的分割和组合:
27S.split([sep, [maxsplit]]) #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
28S.rsplit([sep, [maxsplit]])
29S.splitlines([keepends])   #把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
30S.join(seq)                #把seq代表的序列──字符串序列,用S连接起来
31字符串类型判断:
32S.isalnum() #是否全是字母和数字,并至少有一个字符
33S.isalpha() #是否全是字母,并至少有一个字符
34S.isdigit() #是否全是数字,并至少有一个字符
35S.isspace() #是否全是空白字符,并至少有一个字符
36S.islower() #S中的字母是否全是小写
37S.isupper() #S中的字母是否便是大写
38S.istitle() #S是否是首字母大写的

string的转换:

1float(str) #变成浮点数,float("1e-1")  结果为0.1
2int(str)        #变成整型,  int("12")  结果为12
3int(str,base)   #变成base进制整型数,int("11",2) 结果为2
4long(str)       #变成长整型,
5long(str,base)  #变成base进制长整型,

string公共模块变量:

 1ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
 2ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
 3ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 4digits = '0123456789'
 5hexdigits = '0123456789abcdefABCDEF'
 6letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
 7lowercase = 'abcdefghijklmnopqrstuvwxyz'
 8octdigits = '01234567'
 9printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
10punctuation = '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'
11uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
12whitespace = 'tnx0bx0cr '

字符串包含判断操作符:in , not in

示例:

 1>>> a="abcdefdg"
 2>>> a*2
 3'abcdefdgabcdefdg'
 4>>> a.capitalize()
 5'Abcdefdg'
 6>>> a.replace("a","1")
 7'1bcdefdg'
 8>>> a.split("d")
 9['abc', 'ef', 'g']
10>>> "a" in a
11True
12>>> "x" in a
13False

注:上面也可以使用import string调用string函数,不过在使用时,需要指定第一个值为字符串,如string.spalit(a,”d”)

三、string切片

python string切片操作符的语法为:

1[start:stop:step]

即:[开始索引:结束索引:步长值] ,如下图所示,

string-cut

进行正行索引时,其值从0开始,反向索引时,从 -1 开始。步长值,默认为1,如果为2,则表示进行隔一个取一个,步长值为正时表示从左向右取,如果为负,则表示从右向左取。步长值不能为0 。示例:

正向索引

1>>> str1='abcde'
2>>> str1[:]                 //取整个字符串
3'abcde'
4>>> str1[::2]            //取字符串的值,步长=2(即2步取一次值)
5'ace'
6>>> str1[:6]            //序列号从0开始,到n+1结束(即最后一个序列号的数是取不到的)
7'abcde'
8>>> str1[1:5]            //取字符串“bcde”
9'bcde'

反向索引

1>>> str1[-1]
2'e'
3>>> str1[-1:-5:2]  #输出空列表[],从反向第1个向反向第5个取,但步长为2,表示正向相隔二个取值。
4''
5>>> str1[-1:-5:-2]
6'ec'

正反结合

1>>> tag = '<a href="http://www.python.org">Python web site</a>'
2>>> tag[9:30]
3'http://www.python.org'
4>>> tag[32:-4]
5'Python web site'
6>>> tag[-19:-4]
7'Python web site'

最后,结合string的函数和切片,我们做一个字符串的小写转大写并反转的例子,如下:

1>>> str1='abcde'
2>>> str1[::-1].upper()
3'EDCBA'
4//也可以使用import string进行操作
5>>> import string
6>>> string.upper(str1[::-1])
7'EDCBA'
8>>>