关于字符串模块(来自python学习手册):
很多地方见到调用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
isdigit() 所有都是数字0123456789
isupper() 所有字符都是大写字母A~Z
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可以直接把文件路径拆分为路径和文件名,比较好用。