博客是我工作的好帮手,遇到困难就来博客找资料
分类: 系统运维
2017-02-27 15:45:12
python中字符串格式化有两种,一种是%,另一种是str中的format()功能。
%
列举格式符
%s 字符串
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%% 字符"%"
举例:
#当今有一个格式符
name='dahuang'
print('%s is my dog'% name)
#结果为:
dahuang is my dog
#有两个或者两个以上格式符时,用tuple将多个值传给模版
name='dahuang'
obj='dog'
print('%s is my %s'%(name,obj))
#结果:
dahuang is my dog
#我们可以用字典对格式符命名
print("I'm %(name)s. I'm %(age)d year old" % {'name':'dahuang', 'age':6})
#结果:
I'm dahuang. I'm 6 year old
format()
format()通过{}来代替%
在{}内可以
通过位置映射:
#0,1为位置
>>> '{0},{1}'.format('kkk',123)
'kkk,123'
#默认根据顺序格式化
>>> '{},{}'.format('kkk',123)
'kkk,123'
>>> '{1},{0}'.format('kkk',123)
'123,kkk'
通过关键字映射:
>>>'{name},{age}'.format(age=15,name='liming')
'liming,15'
通过下标:
>>> li=['liming','xiaohong']
>>> '{0[0]},{0[1]}'.format(li)
'liming,xiaohong'
name = "my name is jiachen"
#首字母大写
print (name.capitalize())
#统计字母出现次数
print (name.count('a'))
#居中打印
print (name.center(50,'-'))
#字符串装换成bytes类型
print (name.encode('utf-8'))
#判断以什么结尾
print (name.endswith('en'))
#将tab转多少个空格
print (name.expandtabs())
#查找字符开头索引
print (name.find('y'))
#格式化字符串
#name = "my name is {name} and i am {year} old"
#print (name.format(name='jiachen',year=27))
#print (name.format_map({'name':'jiachen','year':27}))
#是否为数字或字母
print ('abc123'.isalnum())
#是否为字母
print ('Abc'.isalpha())
#是否为十进制
print ('1'.isdecimal())
#是否为整数
print ('11'.isdigit())
#判断是不是一个合法的表示符(变量名)
print ('a1A'.isidentifier())
#是否为小写
print ('Abc'.islower())
#是否只有数字
print ('213'.isnumeric())
#是否为空格
print (' '.isspace())
#是否每个首字母大写
print ('My Name Is'.istitle())
#是否能打印,tty file drive file
print ('My Name Is'.isprintable())
#是否都为大写
print ('My'.isupper())
#拼接字符串
print ('+'.join('abc'))
#长50不够用*号后面补上
print (name.ljust(50,'*'))
#长50不够用*号前面补上
print (name.rjust(50,'*'))
#变小写
print ('Alex'.lower())
#变大写
print ('alex'.upper())
#从左边去掉空格回车
print (' jiachen '.lstrip())
#从右边去掉空格回车
print (' jiachen '.rstrip())
#去掉头尾空格
print (' jiachen '.strip())
#
p = str.maketrans('abcdef','123456')
print ('jiachen'.translate(p))
#字符串替换
print ('jaaaiachen'.replace('a','x',1))
#从右侧查找
print ('jiachen'.rfind('e'))
#分割成列表
print ('jiachen'.split('a'))
#匹配换行符,分割成列表
print ('1+2\n+3+4'.splitlines())
#反转大小写
print ('Jiachen'.swapcase())
#变成一个title
print ('jiachen'.title())
#不够50就前面补零
print ('jiachen'.zfill(50))
1、去空格及特殊符号
s.strip().lstrip().rstrip(',')
2、复制字符串
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
3、连接字符串
#strcat(sStr1,sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print sStr1
4、查找字符
#strchr(sStr1,sStr2)
# < 0 为未找到sStr1 = 'strchr'
sStr2 = 's'
nPos = sStr1.index(sStr2)
print nPos
5、比较字符串
#strcmp(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp(sStr1,sStr2)
6、扫描字符串是否包含指定的字符
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)
7、字符串长度
#strlen(sStr1)
sStr1 = 'strlen'
print len(sStr1)
8、将字符串中的大小写转换
S.lower() #小写
S.upper() #大写
S.swapcase() #大小写互换
S.capitalize() #首字母大写
String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
#实例:
#strlwr(sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1.upper()
#sStr1 = sStr1.lower()
print sStr1
9、追加指定长度的字符串
#strncat(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print sStr1
10、字符串指定长度比较
#strncmp(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp(sStr1[0:n],sStr2[0:n])
11、复制指定长度的字符
#strncpy(sStr1,sStr2,n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print sStr1
12、将字符串前n个字符替换为指定的字符
#strnset(sStr1,ch,n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1
13、扫描字符串
#strpbrk(sStr1,sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print nPos
14、翻转字符串
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1
15、查找字符串
#strstr(sStr1,sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1.find(sStr2)
16、分割字符串
#strtok(sStr1,sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1
#或者
s = 'ab,cde,fgh,ijk'
print(s.split(','))
17、连接字符串
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print delimiter.join(mylist)
18、 中 addslashes 的实现
def addslashes(s):
d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
return ''.join(d.get(c, c) for c in s)
s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0"
print sprint addslashes(s)
19、只显示字母与数字
def OnlyCharNum(s,oth=''):
s2 = s.lower();
fomart = 'abcdefghijklmnopqrstuvwxyz0123456789'
for c in s2:
if not c in fomart:
s = s.replace(c,'');
return s;
print(OnlyStr("a000 aa-b"))
20、截取字符串
str = '0123456789′
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-3] #截取从头开始到倒数第三个字符之前
print str[2] #截取第三个字符
print str[-1] #截取倒数第一个字符
print str[::-1] #创造一个与原字符串顺序相反的字符串
print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
print str[-3:] #截取倒数第三位到结尾
print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
21、字符串在输出时的对齐
S.ljust(width,[fillchar])
#输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
S.rjust(width,[fillchar]) #右对齐
S.center(width, [fillchar]) #中间对齐
S.zfill(width) #把S变成width长,并在右对齐,不足部分用0补足
22、字符串中的搜索和替换
S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
S.index(substr, [start, [end]])
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
S.rindex(substr, [start, [end]])
S.count(substr, [start, [end]]) #计算substr在S中出现的次数
S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
S.strip([chars])
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
S.lstrip([chars])
S.rstrip([chars])
S.expandtabs([tabsize])
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个
23、字符串的分割和组合
S.split([sep, [maxsplit]])
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
S.rsplit([sep, [maxsplit]])
S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
S.join(seq) #把seq代表的序列──字符串序列,用S连接起来
24、字符串的mapping,这一功能包含两个函数
String.maketrans(from, to)
#返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
S.translate(table[,deletechars])
# 使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译表。
25、字符串还有一对编码和解码的函数
S.encode([encoding,[errors]])
# 其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
S.decode([encoding,[errors]])
26、字符串的、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值
S.startswith(prefix[,start[,end]])
#是否以prefix开头
S.endswith(suffix[,start[,end]])
#以suffix结尾
S.isalnum()
#是否全是字母和数字,并至少有一个字符
S.isalpha() #是否全是字母,并至少有一个字符
S.isdigit() #是否全是数字,并至少有一个字符
S.isspace() #是否全是空白字符,并至少有一个字符
S.islower() #S中的字母是否全是小写
S.isupper() #S中的字母是否便是大写
S.istitle() #S是否是首字母大写的
27、字符串类型转换函数,这几个函数只在string模块中有
string.atoi(s[,base])
#base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
string.atol(s[,base]) #转成long
string.atof(s[,base]) #转成float
这里再强调一次,字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]='a'的方式改变值,然后再使用S=" ".join(S)还原成字符串
涉及字符串的操作:
1.字符串的拼接
在一些特殊的情况下我们需要拼接字符串,使用+号即可实现拼接,需要注意以下事项:
python中的字符串在中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间,所以尽量少用字符串拼接。
简单的示例:
password=input("inpur your password:")
print('----***字符串格式化输出 字符串拼接法***----')
"""字符串拼接法万恶的字符串拼接:
万恶的+号每出现一次就会在内从中重新开辟一块空间。 """
info=''' --- info of ''' + name + ''' ---
name:''' + name + '''
age:''' + age + '''
job:''' + job + '''
输出结果
由此,我们可以看到一个字符串拼接实现字符串的格式化的方法,接下来我们分享一下其他的字符串格式化方式。
执行结果
由此我们看到随便输入的数字和字母等不同的内容都正常输出了,而年龄等应该用整数表示,格式化的输出过程中,我们不仅可以使用%s 还可以使用%d和%f,(字符串是 %s;整数 %d;浮点数%f)。
除此以外还有其他的格式,例如
执行结果
判断 – 通常返回一个bool值 | |
是否只包含文字 | |
是否只包含数字(多语言数字) | |
是否只包含数字(0~9) | |
是否只包含数字字符 | |
是否只包含文字和数字 | |
是否是合法标识符 | |
是否是小写 | |
是否全是大写 | |
是否每词首字母大写 | |
是否只包含可打印字符 | |
是否只包含空白字符 | |
是否以prefix开头 | |
是否以suffix结尾 | |
修饰 – 通常返回一个修饰后的字符串 | |
返回一个首字母大写的字符串 | |
返回每个词首字母大写的字符串 | |
"\t"转换成空格 | |
全转换成大写 | |
全转换成小写 | |
左对齐,右填充 | |
右对齐,左填充 | |
居中,两边填充 | |
去除左空白或自定字符 | |
去除右空白或自定字符 | |
去除两边空白或自定字符 | |
大小写互转 | |
左侧填充0到指定宽,一般用来修饰数字 | |
查找&&替换 | |
计算[start, end)间,sub出现次数 | |
str.find(sub[, start[, end]]) | |
str.index(sub[, start[, end]]) | |
str.rfind(sub[, start[, end]]) | |
str.rindex(sub[, start[, end]]) | |
str.replace(old, new[, count]) | |
拆分&&组合 | |
str.join(iterable) | |
str.partition(sep) | |
str.rpartition(sep) | |
str.split([sep[, maxsplit]]) | |
str.rsplit([sep[, maxsplit]]) | |
str.splitlines([keepends]) | |
转换 | |
hex(x) | |
int([number | string[, base]]) | |
len(s) | |
list([iterable]) | |
oct(x) | |
ord(c) | |
repr(object) | |
reversed(seq) | |
str([object[, encoding[, errors]]]) |
代码 | 结果 |
print( "中国abc".isalpha() ) | True |
print( " ".isalpha() ) | False |
print( "123".isalpha() ) | False |
print( "".isalpha() ) | False |
代码 | 结果 |
print( "1234567890".isdecimal() ) | True |
print( "\u0660".isdecimal() ) | True |
print( "abc".isdecimal() ) | False |
print( "".isdecimal() ) | False |
代码 | 结果 |
print( "1234567890".isdigit() ) | True |
print( "\u0660".isdigit() ) | True |
print( "abc".isdigit() ) | False |
print( "".isdigit() ) | False |
代码 | 结果 |
print( "1234567890".isnumeric() ) | True |
print( "\u2155".isnumeric() ) | True |
print( "abc".isnumeric() ) | False |
print( "".isnumeric() ) | False |
代码 | 结果 |
print( "中国abc123456\u2155".isalnum() ) | True |
print( " ".isalnum() ) | False |
print( "\t".isalnum() ) | False |
print( "".isalnum() ) | False |
代码 | 结果 |
print( "if".isidentifier() ) | True |
print( "中国".isidentifier() ) | True |
print( "123".isidentifier() ) | False |
print( "".isidentifier() ) | False |
代码 | 结果 |
print( "abc".islower() ) | True |
print( "aBc".islower() ) | False |
print( "中国".islower() ) | False |
print( "".islower() ) | False |
代码 | 结果 |
print( "HELLO WORLD".istitle() ) | True |
print( "Hello World".istitle() ) | False |
print( "世界你好".istitle() ) | False |
print( "".istitle() ) | False |
代码 | 结果 |
print( "Hello World".istitle() ) | True |
print( "Hello world".istitle() ) | False |
print( "hello world".istitle() ) | False |
print( "".istitle() ) | False |
代码 | 结果 |
print( "a b".isprintable() ) | True |
print( "".isprintable() ) | True |
print( "abc\t".isprintable() ) | False |
print( "abc\n".isprintable() ) | False |
代码 | 结果 |
print( " ".isspace() ) | True |
print( "\t\n".isspace() ) | True |
print( "a b".isspace() ) | False |
print( "".isspace() ) | False |
代码 | 结果 |
print( "中国人".startswith("中") ) | True |
print( "中国人".startswith(("中国","我")) ) | True |
代码 | 结果 |
print( "中国人".endswith("人") ) | True |
print( "中国人".endswith(("国人","我")) ) | True |
代码 | print( "the first sentence. the second sentence.".capitalize() ) |
结果 | The first sentence. the second sentence. |
代码 | print( "this is a title".title() ) |
结果 | This Is A Title |
代码 | "\t".expandtabs(8) |
结果 | ' ' |
代码 | print( "abc".upper() ) |
结果 | ABC |
代码 | print( "ABC".upper() ) |
结果 | abc |
代码 | print( "我".ljust(4,"们") ) |
结果 |
代码 | print( "我".rjust(4,"=") ) |
结果 |
代码 | print( "我是分割线".center(30, "=") ) |
结果 | ============我是分割线============= |
代码 | ' spacious '.lstrip() |
结果 | 'spacious ' |
代码 | ''.lstrip('cmowz.') |
结果 | 'example.com' |
代码 | ' spacious '.rstrip() |
结果 | ' spacious' |
代码 | 'mississippi'.rstrip('ipz') |
结果 | 'mississ' |
代码 | ' spacious '.strip() |
结果 | 'spacious' |
代码 | ''.strip('cmowz.') |
结果 | 'example' |
代码 | print( "Abc".swapcase() ) |
结果 | aBC |
代码 | print( "15".zfill(8) ) |
结果 | 00000015 |
代码 | print( "-15".zfill(8) ) |
结果 | -0000015 |
代码 | print( "abababab" .count("abab" ) |
结果 | 2 |
name = "my name is jiachen"
#首字母大写
print (name.capitalize())
#统计字母出现次数
print (name.count('a'))
#居中打印
print (name.center(50,'-'))
#字符串装换成bytes类型
print (name.encode('utf-8'))
#判断以什么结尾
print (name.endswith('en'))
#将tab转多少个空格
print (name.expandtabs())
#查找字符开头索引
print (name.find('y'))
#格式化字符串
#name = "my name is {name} and i am {year} old"
#print (name.format(name='jiachen',year=27))
#print (name.format_map({'name':'jiachen','year':27}))
#是否为数字或字母
print ('abc123'.isalnum())
#是否为字母
print ('Abc'.isalpha())
#是否为十进制
print ('1'.isdecimal())
#是否为整数
print ('11'.isdigit())
#判断是不是一个合法的表示符(变量名)
print ('a1A'.isidentifier())
#是否为小写
print ('Abc'.islower())
#是否只有数字
print ('213'.isnumeric())
#是否为空格
print (' '.isspace())
#是否每个首字母大写
print ('My Name Is'.istitle())
#是否能打印,tty file drive file
print ('My Name Is'.isprintable())
#是否都为大写
print ('My'.isupper())
#拼接字符串
print ('+'.join('abc'))
#长50不够用*号后面补上
print (name.ljust(50,'*'))
#长50不够用*号前面补上
print (name.rjust(50,'*'))
#变小写
print ('Alex'.lower())
#变大写
print ('alex'.upper())
#从左边去掉空格回车
print (' jiachen '.lstrip())
#从右边去掉空格回车
print (' jiachen '.rstrip())
#去掉头尾空格
print (' jiachen '.strip())
#
p = str.maketrans('abcdef','123456')
print ('jiachen'.translate(p))
#字符串替换
print ('jaaaiachen'.replace('a','x',1))
#从右侧查找
print ('jiachen'.rfind('e'))
#分割成列表
print ('jiachen'.split('a'))
#匹配换行符,分割成列表
print ('1+2\n+3+4'.splitlines())
#反转大小写
print ('Jiachen'.swapcase())
#变成一个title
print ('jiachen'.title())
#不够50就前面补零
print ('jiachen'.zfill(50))
1、去空格及特殊符号
s.strip().lstrip().rstrip(',')
2、复制字符串
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
3、连接字符串
#strcat(sStr1,sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print sStr1
4、查找字符
#strchr(sStr1,sStr2)
# < 0 为未找到sStr1 = 'strchr'
sStr2 = 's'
nPos = sStr1.index(sStr2)
print nPos
5、比较字符串
#strcmp(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp(sStr1,sStr2)
6、扫描字符串是否包含指定的字符
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)
7、字符串长度
#strlen(sStr1)
sStr1 = 'strlen'
print len(sStr1)
8、将字符串中的大小写转换
S.lower() #小写
S.upper() #大写
S.swapcase() #大小写互换
S.capitalize() #首字母大写
String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
#实例:
#strlwr(sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1.upper()
#sStr1 = sStr1.lower()
print sStr1
9、追加指定长度的字符串
#strncat(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print sStr1
10、字符串指定长度比较
#strncmp(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp(sStr1[0:n],sStr2[0:n])
11、复制指定长度的字符
#strncpy(sStr1,sStr2,n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print sStr1
12、将字符串前n个字符替换为指定的字符
#strnset(sStr1,ch,n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1
13、扫描字符串
#strpbrk(sStr1,sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print nPos
14、翻转字符串
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1
15、查找字符串
#strstr(sStr1,sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1.find(sStr2)
16、分割字符串
#strtok(sStr1,sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1
#或者
s = 'ab,cde,fgh,ijk'
print(s.split(','))
17、连接字符串
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print delimiter.join(mylist)
18、PHP 中 addslashes 的实现
def addslashes(s):
d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
return ''.join(d.get(c, c) for c in s)
s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0"
print sprint addslashes(s)
19、只显示字母与数字
def OnlyCharNum(s,oth=''):
s2 = s.lower();
fomart = 'abcdefghijklmnopqrstuvwxyz0123456789'
for c in s2:
if not c in fomart:
s = s.replace(c,'');
return s;
print(OnlyStr("a000 aa-b"))
20、截取字符串
str = '0123456789′
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-3] #截取从头开始到倒数第三个字符之前
print str[2] #截取第三个字符
print str[-1] #截取倒数第一个字符
print str[::-1] #创造一个与原字符串顺序相反的字符串
print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
print str[-3:] #截取倒数第三位到结尾
print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
21、字符串在输出时的对齐
S.ljust(width,[fillchar])
#输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
S.rjust(width,[fillchar]) #右对齐
S.center(width, [fillchar]) #中间对齐
S.zfill(width) #把S变成width长,并在右对齐,不足部分用0补足
22、字符串中的搜索和替换
S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
S.index(substr, [start, [end]])
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
S.rindex(substr, [start, [end]])
S.count(substr, [start, [end]]) #计算substr在S中出现的次数
S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
S.strip([chars])
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
S.lstrip([chars])
S.rstrip([chars])
S.expandtabs([tabsize])
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个
23、字符串的分割和组合
S.split([sep, [maxsplit]])
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
S.rsplit([sep, [maxsplit]])
S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
S.join(seq) #把seq代表的序列──字符串序列,用S连接起来
24、字符串的mapping,这一功能包含两个函数
String.maketrans(from, to)
#返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
S.translate(table[,deletechars])
# 使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译表。
25、字符串还有一对编码和解码的函数
S.encode([encoding,[errors]])
# 其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
S.decode([encoding,[errors]])
26、字符串的测试、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值
S.startswith(prefix[,start[,end]])
#是否以prefix开头
S.endswith(suffix[,start[,end]])
#以suffix结尾
S.isalnum()
#是否全是字母和数字,并至少有一个字符
S.isalpha() #是否全是字母,并至少有一个字符
S.isdigit() #是否全是数字,并至少有一个字符
S.isspace() #是否全是空白字符,并至少有一个字符
S.islower() #S中的字母是否全是小写
S.isupper() #S中的字母是否便是大写
S.istitle() #S是否是首字母大写的
27、字符串类型转换函数,这几个函数只在string模块中有
string.atoi(s[,base])
#base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
string.atol(s[,base]) #转成long
string.atof(s[,base]) #转成float
这里再强调一次,字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]='a'的方式改变值,然后再使用S=" ".join(S)还原成字符串
涉及字符串的操作:
1.字符串的拼接
在一些特殊的情况下我们需要拼接字符串,使用+号即可实现拼接,需要注意以下事项:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间,所以尽量少用字符串拼接。
简单的示例:
password=input("inpur your password:")
print('----***字符串格式化输出 字符串拼接法***----')
"""字符串拼接法万恶的字符串拼接:
万恶的+号每出现一次就会在内从中重新开辟一块空间。 """
info=''' --- info of ''' + name + ''' ---
name:''' + name + '''
age:''' + age + '''
job:''' + job + '''
输出结果
由此,我们可以看到一个字符串拼接实现字符串的格式化的方法,接下来我们分享一下其他的字符串格式化方式。
执行结果
由此我们看到随便输入的数字和字母等不同的内容都正常输出了,而年龄等应该用整数表示,格式化的输出过程中,我们不仅可以使用%s 还可以使用%d和%f,(字符串是 %s;整数 %d;浮点数%f)。
除此以外还有其他的格式,例如
执行结果
判断 – 通常返回一个bool值 | |
是否只包含文字 | |
是否只包含数字(多语言数字) | |
是否只包含数字(0~9) | |
是否只包含数字字符 | |
是否只包含文字和数字 | |
是否是合法标识符 | |
是否是小写 | |
是否全是大写 | |
是否每词首字母大写 | |
是否只包含可打印字符 | |
是否只包含空白字符 | |
是否以prefix开头 | |
是否以suffix结尾 | |
修饰 – 通常返回一个修饰后的字符串 | |
返回一个首字母大写的字符串 | |
返回每个词首字母大写的字符串 | |
"\t"转换成空格 | |
全转换成大写 | |
全转换成小写 | |
左对齐,右填充 | |
右对齐,左填充 | |
居中,两边填充 | |
去除左空白或自定字符 | |
去除右空白或自定字符 | |
去除两边空白或自定字符 | |
大小写互转 | |
左侧填充0到指定宽,一般用来修饰数字 | |
查找&&替换 | |
计算[start, end)间,sub出现次数 | |
str.find(sub[, start[, end]]) | |
str.index(sub[, start[, end]]) | |
str.rfind(sub[, start[, end]]) | |
str.rindex(sub[, start[, end]]) | |
str.replace(old, new[, count]) | |
拆分&&组合 | |
str.join(iterable) | |
str.partition(sep) | |
str.rpartition(sep) | |
str.split([sep[, maxsplit]]) | |
str.rsplit([sep[, maxsplit]]) | |
str.splitlines([keepends]) | |
转换 | |
hex(x) | |
int([number | string[, base]]) | |
len(s) | |
list([iterable]) | |
oct(x) | |
ord(c) | |
repr(object) | |
reversed(seq) | |
str([object[, encoding[, errors]]]) |
代码 | 结果 |
print( "中国abc".isalpha() ) | True |
print( " ".isalpha() ) | False |
print( "123".isalpha() ) | False |
print( "".isalpha() ) | False |
代码 | 结果 |
print( "1234567890".isdecimal() ) | True |
print( "\u0660".isdecimal() ) | True |
print( "abc".isdecimal() ) | False |
print( "".isdecimal() ) | False |
代码 | 结果 |
print( "1234567890".isdigit() ) | True |
print( "\u0660".isdigit() ) | True |
print( "abc".isdigit() ) | False |
print( "".isdigit() ) | False |
代码 | 结果 |
print( "1234567890".isnumeric() ) | True |
print( "\u2155".isnumeric() ) | True |
print( "abc".isnumeric() ) | False |
print( "".isnumeric() ) | False |
代码 | 结果 |
print( "中国abc123456\u2155".isalnum() ) | True |
print( " ".isalnum() ) | False |
print( "\t".isalnum() ) | False |
print( "".isalnum() ) | False |
代码 | 结果 |
print( "if".isidentifier() ) | True |
print( "中国".isidentifier() ) | True |
print( "123".isidentifier() ) | False |
print( "".isidentifier() ) | False |
代码 | 结果 |
print( "abc".islower() ) | True |
print( "aBc".islower() ) | False |
print( "中国".islower() ) | False |
print( "".islower() ) | False |
代码 | 结果 |
print( "HELLO WORLD".istitle() ) | True |
print( "Hello World".istitle() ) | False |
print( "世界你好".istitle() ) | False |
print( "".istitle() ) | False |
代码 | 结果 |
print( "Hello World".istitle() ) | True |
print( "Hello world".istitle() ) | False |
print( "hello world".istitle() ) | False |
print( "".istitle() ) | False |
代码 | 结果 |
print( "a b".isprintable() ) | True |
print( "".isprintable() ) | True |
print( "abc\t".isprintable() ) | False |
print( "abc\n".isprintable() ) | False |
代码 | 结果 |
print( " ".isspace() ) | True |
print( "\t\n".isspace() ) | True |
print( "a b".isspace() ) | False |
print( "".isspace() ) | False |
代码 | 结果 |
print( "中国人".startswith("中") ) | True |
print( "中国人".startswith(("中国","我")) ) | True |
代码 | 结果 |
print( "中国人".endswith("人") ) | True |
print( "中国人".endswith(("国人","我")) ) | True |
代码 | print( "the first sentence. the second sentence.".capitalize() ) |
结果 | The first sentence. the second sentence. |
代码 | print( "this is a title".title() ) |
结果 | This Is A Title |
代码 | "\t".expandtabs(8) |
结果 | ' ' |
代码 | print( "abc".upper() ) |
结果 | ABC |
代码 | print( "ABC".upper() ) |
结果 | abc |
代码 | print( "我".ljust(4,"们") ) |
结果 |
代码 | print( "我".rjust(4,"=") ) |
结果 |
代码 | print( "我是分割线".center(30, "=") ) |
结果 | ============我是分割线============= |
代码 | ' spacious '.lstrip() |
结果 | 'spacious ' |
代码 | ''.lstrip('cmowz.') |
结果 | 'example.com' |
代码 | ' spacious '.rstrip() |
结果 | ' spacious' |
代码 | 'mississippi'.rstrip('ipz') |
结果 | 'mississ' |
代码 | ' spacious '.strip() |
结果 | 'spacious' |
代码 | ''.strip('cmowz.') |
结果 | 'example' |
代码 | print( "Abc".swapcase() ) |
结果 | aBC |
代码 | print( "15".zfill(8) ) |
结果 | 00000015 |
代码 | print( "-15".zfill(8) ) |
结果 | -0000015 |
代码 | print( "abababab" .count("abab" ) |
结果 | 2 |