很多地方见到调用string模块的方法,如,string.method(X, arguments)。同时又存在直接使用字符串方法的形式,如X.method(arguments)。一直很困惑,今天再python学习手册找到答案。其实就是个历史遗留问题,之前只有string模块,后面合入到字符串对象的方法集中。Python3.0后已经删除string模块调用形式。


一个简单的统计字符串中各种字符数量的程序,主要涉及到String模块的一些函数和eval的使用,简单的组合就可以解决问题,这里只是为了顺便学习下eval,所以用了比较丑的方式。

#encoding: utf-8

def StringCounter(aString):

    recordDict = {'isalpha': 0, 'isdigit': 0, 'isspace': 0}
    for tempstr in aString:
        for key in recordDict.keys():
            tempfunc = key + "()"
            if eval("'" + tempstr + "'" + "." + tempfunc):
                recordDict[key] += 1
            else:
                continue
    for key, value in recordDict.items():
        print("%s : %i" % (key, value)) 

if __name__ == "__main__":
    test = "ab123 ahd"
    StringCounter(test)



上面用到了三个字符串方法,其他常用的整理如下:

第一类:判断字符串是否属于某种类别,满足条件,返回True,否则,返回False 

isalnum() 所有字符都是0123456789,或者字母A~Z,a~z 

isalpha() 所有字符都是字母A~Z,a~z  


isdigit() 所有都是数字0123456789 

islower() 所有字符都是小写字母a~z  


isupper() 所有字符都是大写字母A~Z 

istitle() 所有单词都是首字母大写


isspace() 所有字符都是空白字符\n,\t,\r,' ' 


第二类:在字符串中查找某个字符串

find(substring,[start,[,end]]) 如果找到,返回索引值。如果找不到,返回-1
rfind(substring,[start,[,end]]) 反向查找
index(substring,[start,[,end]]) 和find差不多,需要注意的是找不到时会抛ValueError异常,要注意处理
rindex(substring,[start,[,end]])
count(substring,[start,[,end]])找到的substring的次数


第三类:格式化字符串

ljust(width, symbol) , 左对齐,需要注意如果str的长度没有width那么长,就在后面补symbol,默认是空格
rjust(width, symbol) ,右对齐,前面补
center(width,  symbol),居中对齐,前后补,和源字符串一起凑够width长度,如果补的数是奇数,则优先后面的。如'abc'.center(10, "*")='***abc****'
lstrip(symbol), 去掉左边symbol
rstrip(symbol), 去掉右边symbol
strip(symbol),去掉两边


第四类:字符串大小写转换

capitalize(),只有首字母大写,其他都转成小写。"THIS IS TEST".capitalize()  = 'This is test'
lower()
upper()
swapcase()


第五类:字符串的格式化输出(也可作为格式化)

%d:表示有符号十进制数 

%i:表示有符号十进制数 

%o:表示无符号八进制数 

%u:表示无符号整数 

%x:表示无符号十六进制数,小写 

%X:表示无符号十六进制数,大写 

%e:表示浮点数,科学表达式法,小写 

%E:表示浮点数,科学表达式法,大写 

%f:表示浮点数 

%g:表示浮点数,如果是小于0.0001或者不够精度,就用科学表示法 

%c:表示把ASCII整数表示单个字符 

%r:表示一个字符串,这个字符串使用repr()的返回值 

%s:表示一个字符串,这个字符串使用str()函数的返回值 


第六类: 字符串的拼接和拆分(字符串作为序列,可以直接切边和遍历)

1、直接用'+'拼接

2、str.join(words) , words 是一个只含有字符串的tuple或者list。join用str作为分隔符将words中的字符串连接起来,合并成一个字符串

3、split(word),拆分。注意,os.path中的split可以直接把文件路径拆分为路径和文件名,比较好用。