Python入门(五)字符串各种问题总结
1.字符串中使用引号 非成对出现的引号,用转义字符"\": >>> str1='Where\'re you now?' >>> print(str1) Where're you now? 成对出现的引号:1)单引号中可用双引号 >>> str2='"DJY"' >>> print(str2) "DJY" 2)双引号中可用单引号 >>> str3="'DJY'" >>> print(str3) 'DJY' 3)三引号可保持字符串原来的格式(从转义字符中被解救的感觉) >>> str4='''DJY FXW''' >>> print(str4) DJY FXW >>> str5="""DJY FXW""" >>> print(str5) DJY FXW 如果想在字符串中既有成对单引号又有成对双引号: >>> str61="'djy'" >>> str62='"fxw"' >>> print(str61+str62) 'djy'"fxw" 2.字符串中显示转义字符 如果想在字符串中显示少量转义字符"\": >>> str1='DJY\\FXW' >>> print(str1) DJY\FXW 此种方法常用在:发出系统响铃声 \a,退格符 \b,换行符 \n,横向制表符(TAB) \t,纵向制表符 \v,回车符 \r,换页符 \f,八进制数代表的字符 \o,十六进制数代表的字符 \x,其它的字符以普通格式输出 \other空字符 \0,反斜杠 \。 如果想在字符串中显示大量转义字符"\": >>> str2=r'C:\DJY\djy\d\j\y' #r是来自于原始字符串(raw strings) >>> print(str2) C:\DJY\djy\d\j\y 若还想以结尾,只需改为: >>> str2=r'C:\DJY\djy\d\j\y\\' >>> print(str2) C:\DJY\djy\d\j\y\ 3.字符串运算符 字符索引[] >>> str1='python2048' >>> str1[6] ‘2’ >>> str1[-1] '8' 字符串分片[:] >>> str1='python2048' >>> str1[6:10] '2048' >>> str1[:6] 'python' 字符串连接+ >>> str1='python' >>> str2='2048' >>> str1+str2 'python2048' 字符串重复* >>> str1='python2048' >>> str1*3 'python2048python2048python2048' 4.字符串格式化 字符串格式化符号 格式化字符及其ASCII码:%c >>> '%c %c %c'%(97,98,99) 'a b c' 格式化字符串:%s >>> '%s'%'djy' 'djy' 格式化整数:%d >>> '%d+%d=%d'%(1,2,1+2) '1+2=3' 格式化无符号八进制、十六进制数(小写、大写):%o、%x、%X >>> '%X'%(10) 'A' 格式化定点数,可设置小数点后的精度:%f >>> '%f'%99.09584 '99.095840' 用科学计数法格式化定点数(小写、大写):%e、%E >>> '%e'%99.09584 '9.909584e+01' 根据值的大小决定使用%f还是%e(%E):%g、%G >>> '%G'%99.09584 '99.0958' 格式化操作符辅助指令 显示最小总宽度m,小数点后的位数n:m.n >>> '%9.2f'%99.09584 ' 99.10' 左对齐:- >>> '%-20f'%2 '2.000000 ' 在正数前面显示加号(+):+ >>> '%+f'%2 '+2.000000' 在八进制数前面显示零('0'),在十六进制数前面显示'0x'或'0X' >>> '%#o'%10 '0o12' 显示的数字前面填充'0'取代空格:0 >>> '%020f'%10 '0000000000010.000000' 5.字符串的BIF 把字符串的第一个字符改成大写:capitalize() >>> str1='python精英群' >>> str1.capitalize() 'Python精英群' 把整个字符串的所有字符改为小写:casefold() >>> str2='PYTHON2048' >>> str2.casefold() 'python2048' 将字符串居中,并用空格填充至长度width形成新字符串:center(width) >>> str3='python2048' >>> str3.center(20) ' python2048 ' 返回sub在字符串里出现的次数,start和end参数表示范围:count(sub[,start[,end]]) >>> str4='djydjydjy' >>> str4.count('jy',2,9) 2 检查字符串是否以sub子字符串结束,如果是返回True,否则返回False:endswith(sub[,start[,end]]) >>> str5='djydjydjy' >>> str5.endswith('jy',2,9) True 把字符串中的tab符号(t)转换为空格,如不指定参数,默认空格数tabsize=8:expandtabs([tabsize=8]) >>> str6='djy\tpython\tfxw' >>> str6.expandtabs() 'djy python fxw' 检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1:find(sub[,start[,end]]) >>> str7='djyfxw' >>> str7.find('c') -1 检测sub是否包含在字符串中,如果有则返回索引值,否则会出现Error:index(sub[,start[,end]]) >>> str8='djyfxw' >>> str8.index('c') #发生Error ValueError: substring not found 如果字符串中所有字符都为字母或数字,则返回True,否则返回False:isalnum() >>> str9='djy&fxw' >>> str9.isalnum() False 如果字符串中字符都为字母,则返回True,否则返回False:isalpha() >>> str10='djy&fxw' >>> str10.isalpha() False 如果字符串为Unicode数字、全角数字(双字节)则返回True,罗马数字、汉字数字返回Flase, byte数字(单字节)会出现Error:isdecimal() >>> str11='2048' >>> str11.isdecimal() True 如果字符串为Unicode数字、byte数字(单字节)、全角数字(双字节)、罗马数字则返回True, 汉字数字返回Flase:isdigit() >>> str12='2048' >>> str12.isdigit() True 如果字符串为Unicode数字、全角数字(双字节)、罗马数字、汉字数字则返回True,byte数字(单字节)会出现Error:isnumeric() >>> str13='2048' >>> str13.isnumeric() True 如果字符串中字符都是小写,则返回True,否则返回Flase:islower() >>> str14='奥特曼超人' >>> str14.islower() False 如果字符串中字符都是大写,则返回True,否则返回Flase:isupper() >>> str15='奥特曼超人' >>> str15.isupper() False 如果字符串只包含空格,则返回True,否则返回Flase:isspace() >>> str16=' ' >>> str16.isspace() True 如果字符串是标题化(所有单词都是以大写开始,其余字母均小写),则返回True,否则返回Flase:istitle() >>> str17='Hello,Djy' >>> str17.istitle() True 以字符串为分隔符,插入到sub中所有的字符之间:join(sub) >>> str18='DJY' >>> str18.join('fxw') 'fDJYxDJYw' 返回一个左对齐的字符串,并用空格填充至长度为width的新字符串:ljust(width) >>> str19='DJY' >>> str19.ljust(20) 'DJY ' 将字符串中所有的大写字母转化为小写:lower() >>> str20='DJY' >>> str20.lower() 'djy' 去掉字符串左边的所有空格:lstrip() >>> str21=' DJY' >>> str21.lstrip() 'DJY' 找到子字符串sub,把字符串分成一个三元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回('原字符串',","):partition(sub) >>> str22='djyandfxw' >>> str22.partition('and') ('djy', 'and', 'fxw') 把字符串中的old子字符串替换成new子字符串,如果指定count 则替换不能超过count次:replace(old,new[,count]) >>> str23='djyandfxw' >>> str23.replace('a','d',1) 'djydndfxw' 从右开始检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1(与find()类似):rfind(sub[,start[,end]]) 从右开始检测sub是否包含在字符串中,如果有则返回索引值,否则会出现Error(与index()类似):rindex(sub[,start[,end]]) 返回一个右对齐的字符串,并用空格填充长度至width的新字符串:rjust(width) >>> str24='djyandfxw' >>> str24.rjust(20) ' djyandfxw' 从右开始找子字符串sub,把字符串分成一个三元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回('原字符串',",")(与partition(sub)类似):rpartition(sub) 删除字符串末尾的所有空格:rstrip() >>> str25='djyandfxw ' >>> str25.rstrip() 'djyandfxw' 不带参数默认是以空格为分隔符切片为字符串,如果有设置maxsplit参数,则仅分割maxsplit个子字符串,返回切片后的子字符串拼接的列表:split(sep=None,maxsplit=-1) >>> str26='djy python 2048 fxw' >>> str26.split() ['djy', 'python', '2048', 'fxw'] 按'n'分隔,返回一个包含各行作为元素的列表,如果指定keepends参数,则返回前keepends行:splitlines(([keepends])) >>> str27='djy\npython\n2048\nfxw' >>> str27.splitlines(2) ['djy\n', 'python\n', '2048\n', 'fxw'] 检查字符串是否以prefix开头,是则返回True,否则返回False:startswith(prefix[,start[,end]]) >>> str28='djywanan' >>> str28.startswith('d') True 删除字符串前边和后边所有的空格,chars参数可以设置删除的字符:strip([chars]) >>> str29='djy wanan' >>> str29.strip('d') 'jy wanan' 翻转字符串中的大小写:swapcase() >>> str30='DJYwanan' >>> str30.swapcase() 'djyWANAN' 返回标题化(所有的单词都是以大写开始,其余字母均为小写)的字符串:title() >>> str31='DJY wanan' >>> str31.title() 'Djy Wanan' 根据table的规则(可以由str.maketrans('a','b')定制)转换字符串中的字符:translate(table) >>> str32='DJYDJYDJY' >>> str32.translate(str.maketrans('DJY','FXW')) 'FXWFXWFXW' 将字符串中所有的小写转化为大写:upper() >>> str33='djywanan' >>> str33.upper() 'DJYWANAN' 返回长度为width的字符串,原字符串右对齐,前面用0填充:zfill(width) >>> str34='djywanan' >>> str34.zfill(20) '000000000000djywanan' 将字符串格式化:format()1)使用位置参数: >>> 'I like {1},{0},in particular {2}.--{2}'.format('music','dance','DJY') 'I like dance,music,in particular DJY.--DJY' >>> list1=['music','dance','DJY'] >>> 'I like {},{},in particular {}'.format(*list1) 'I like music,dance,in particular DJY' 位置参数不受顺序约束,只要format里有对应的参数值即可为{},参数索引从0开,传入位置参数列表可用*列表。2)使用关键字参数: >>> hash1={'music':'psychedelic rock','dance':'Latin','name':'DJY'} >>> 'I like {music},{dance},in particular {name}'.format(**hash1) 'I like psychedelic rock,Latin,in particular DJY' >>> hash1={'music':'psychedelic rock','dance':'Latin','name':'DJY'} >>> 'I like {music},{dance},in particular {name}'.format(music='classical music',dance='tango',name='FXW') 'I like classical music,tango,in particular FXW' 关键字参数必须要一一对应,以**字典格式用字典输入关键字参数。3)如果想输出{} >>> '{{0}}'.format('djy') '{0}' 4)精度与进制转换: >>> '{0:.2f}{1}'.format(1/2,'km') '0.50km' >>> '{0:x}'.format(10) #转换成十六进制 'a' >>> '{:,}'.format(123456789) #千分位格式化 '123,456,789' 5)填充与格式化:{填充字符} >>> '{0:*>10}'.format(20) #<左对齐,>右对齐,=居中 '********20' 以encoding指定的编码格式对字符串进行编码,以decoding指定的解码码格式对字符串进行解码:encode(encoding='utf-8',errors='strict')、decode(encoding='utf-8',errors='strict') Python3中,以str型代替了unicode类型,经过编码后变为了字节类型(bytes),而但是两个函数的使用方法不变: >>> a='djy' >>> a_utf8=a.encode("UTF-8") #以UTF-8编码对a进行编码,获得bytes类型对象 >>> a_utf8.decode("UTF-8",'strict') #对a_utf8进行解码得到的结果,将无法还原原来的字符串内容 'djy' END!