1 设置字符串格式
常用的设置字符串格式方法
>>> fm = 'Hello, %s.%s are you?'
>>> values = ('world','How')
>>> fm % values
'Hello, world.How are you?'
>>>
>>> from string import Template
>>> tmpl = Template('Hello, $who! $how are you')
>>> tmpl.substitute(who='world',how='How')
'Hello, world! How are you'
>>>
>>> '{},{},{}'.format('zero','one','two','three')
'zero,one,two'
>>> '{3},{2},{1}'.format('zero','one','two','three')
'three,two,one'
>>> '{1},{1},{0}'.format('zero','one','two','three')
'one,one,zero'
>>>
>>> from math import pi
>>> '{name} is aprosimately {value:.2f}.'.format(value=pi,name='π')
'π is aprosimately 3.14.'
>>> name='pi'
>>> f'{name} is aprosimately {pi:.2f}' #变量名相同时format可以简写
'pi is aprosimately 3.14'
>>>
2 字符串方法
方法 | 描述 |
---|---|
string.capitalize() | 返回字符串副本,将第一个字符大写 |
string.casefold() | 返回经过标准化后的字符串,标准化类似于转换为小写,但是更适用于对Unicode字符串进行不区分大小写的比较 |
string.lower() | 将字符串转换为小写,并返回结果 |
string.upper() | 将字符串中所有的字母都转换为大写,并返回结果 |
string.swapcase() | 将字符串中所有字母的大小写都反转,并返回结果 |
string.title() | 将字符串的所有单词首字母大写,并返回结果 |
string.center(width[, fillchar]) | (居中)返回一个长度为(len(string),width)的字符串。字符串中间包含当前字符串,两端用fillchar指定的字符填充(默认空格) |
string.ljust(width[, fillchar]) | (居左)返回一个长度为(len(string),width)的字符串。开头是当前字符串的副本,结尾使用fillchar字符填充,默认空格填充。 |
string.rjust(width[, fillchar]) | (居右)返回一个长度为(len(string),width)的字符串。末尾是当前字符串的副本,开头使用fillchar字符填充,默认空格填充。 |
string.zfill(width) | (补0)在字符串左边加0(但将原来打头的+或-移到开头),使其长度为width |
string.find(sub[, start[, end]]) | 返回找到的第一个子串sub的索引,没找到返回-1,可以设置搜索范围为string[start:end] |
string.rfind(sub[, start[, end]]) | 和find类似,但是返回最后一个找到的索引 |
string.index(sub[, start[], end]) | 返回指定的第一个子串sub的索引,如果没找到将引发ValueError异常,可将搜索范围限定为string[start:end] |
string.rindex(sub[,start[,end]]) | 和index()方法类似,但是返回的是第一个找到的最后一个索引 |
string.count(sub[, start[, end]]) | 计算子串sub出现的次数,可搜索范围限定string[start:end] |
string.encode([encoding[], errors]) | 返回适用指定编码和errors指定的错误处理方式对字符串进行编码的结果,参数errors的可能取值范围包括‘strict’、‘ignore’、‘replace’等 |
string.expandtabs([tabsize]) | 返回将字符串中的制表符展开为空格后的结果,tabsize默认为8 |
string.format(…) | 实现了标准化字符串格式设置。将字符串中用大括号分隔的字段替换为相应的参数,再返回结果 |
string.format_map(mapping) | 类似于使用关键字参数调用format,参数以映射方式提供的 |
string.replace(old, new[, max]) | 将字符串中的子串old替换为new,并返回结果;可以设置最大限制次数为max |
string.maketrans(x[, y[, z]]) | 一个静态方法,创建一个供translate使用的转换表。如只指定一个参数x,它必须是从字符或序数到Unicode序数或None(用于删除)的映射;也可以使用两个表示源字符和目标字符的字符串调用它;还可以提供第三个参数,它指定要删除的字符 |
string.translate(table) | 根据转换表table(这是使用maketrans创建的)对字符串中所有的字符进行转换,并返回结果 |
string.partition(sep) | 在字符串中搜索sep,并返回元组(sep前面部分,sep,sep后面部分) |
string.rpartition(sep) | 与partition相同,但从右往左 |
string.split(sep[,maxsplit]) | 返回一个列表,其中包含以sep为分隔符对字符串进行划分的结果(如果没有指定sep,将以所有空白符为分隔符进行划分);还可以将最大划分次数限制为maxsplit |
string.rsplit(sep[, maxsplit]) | 与split相同,但指定了参数maxsplit,从右往左计算划分次数 |
string.splitlines([keepends]) | 返回一个列表,其中包含字符串的所有行;如果参数为True,将包含换行符 |
string.join(sequence) | 与split相反,将string和sequence中所有的元素合并,并返回结果 |
string.strip([chars]) | 将字符串开头和结尾的所有的char字符都删除(默认为所有空白符),并返回结果 |
string.rstrip([chars]) | 将字符串末尾所有的char字符都删除(默认为所有空白符),并返回结果 |
string.lstrip([char]) | 将开头的chars(默认为空白字符,空格,制表符等)都删除,并返回结果 |
string.startswith(prefix[, start[, end]]) | 检查字符串是否以prefix打头;可以将匹配范围限制在索引start和end之间 |
string.endswith(suffix[, start[, end]]) | 检查字符串是否以suffix结尾,还可以使用索引start和end来指定匹配范围 |
判断字符串是否满足特点条件
方法 | 描述 |
---|---|
string.isalnum() | 检查字符串中的字符是否都是字母或数(判断不带符号字符串) |
string.isalpha() | 检查字符串中的字符是否都是字母 |
string.isdecimal() | 检查字符串中的字符是否都是十进制数 |
string.isdigit() | 检查字符串中的字符是否都是数字 |
string.isnumeric() | 检查字符串中的所有字符是否都是数字字符 |
string.isidentifier() | 检查字符串是否可以用作Python标识符 |
string.islower() | 检查字符串中的字母都是小写的,字符串可以包含非字母的字符 |
string.isupper() | 检查字符串中的字母都是大写的 |
string.isprintable() | 检查字符串中的字符是否都是可打印的 |
string.isspace() | 检查字符串中的字符是否都是空白字符 |
string.istitle() | 检查字符串中位于非字母后面的字母都是大写的,且其他所有字母都是小写的 |
常用方法举例
center()
>>> 'center'.center(10)
' center '
>>> 'center'.center(1)
'center'
>>> 'center'.center(10,'-')
'--center--'
>>>
find()
如果存在则返回第一个找到的索引号,否则返回-1。可以指定字符串搜索的索引范围。
>>> number = '01234567'
>>> number.find('1234')
1
>>> number.find('67')
6
>>> number.find('678')
-1
>>> number.find('67',5)
6
>>> number.find('67',5,6)
-1
>>>
join()
用于合并序列的元素,作用和split相反。注意元素必须都是字符串。
>>> seq = ['1', '2', '3',]
>>> sep = '+'
>>> sep.join(seq)
'1+2+3'
>>> 'cc'.join(seq)
'1cc2cc3'
>>> seq = [1, 2]
>>> 'cc'.join(seq)
Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
'cc'.join(seq)
TypeError: sequence item 0: expected str instance, int found
>>>
split()
作用与join相反,用于将字符串拆分为序列。
>>> '1cc2cc3'.split('cc')
['1', '2', '3']
>>> '1 2 3 '.split()
['1', '2', '3']
>>>
lower()&upper()
>>> 'Cc'.lower()
'cc'
>>> 'Cc'.upper()
'CC'
>>>
replace
字符串替换
>>> '3322'.replace('22','tt').replace('33','22').replace('tt','33')
'2233'
>>>
translate
translate()只能进行单字符替换,一次可以替换多个字符。
替换前使用maketrans()创建转换表
maketrans()可以传入3个参数,前面两个是替换字符的对应关系,必填项;第三个是设置需要删掉字符的可选项。
>>> table = str.maketrans('hw?','HW!',' ')
>>> 'hello, world?'.translate(table)
'Hello,World!'
>>>
format_map
>>> phonebook = {'张三':'10086','李四':'10010'}
>>> "张三的号码是{张三}".format_map(phonebook)
'张三的号码是10086'
>>> temp = '''<html>
<head><title>{title}</title></head>
<body>
<h1>{title}</h1>
<p>{text}</p>
</body>'''
>>> data = {'title':'Home Page','text':'hello world'}
>>> print(temp.format_map(data))
<html>
<head><title>Home Page</title></head>
<body>
<h1>Home Page</h1>
<p>hello world</p>
</body>
>>>
string.isdecimal()、string.isdigit()、string.isnumeric()的区别:
isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节)
False: 汉字数字,罗马数字,小数
Error: 无
isdecimal()
True: Unicode数字,全角数字(双字节)
False: 罗马数字,汉字数字,小数
Error: byte数字(单字节)
isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 小数
Error: byte数字(单字节)
string.istitle()用法:
>>> 'A0A1AAaaa'.istitle()
False
>>> 'A0A1A Aaaa'.istitle()
True
>>>