10.Python【序列】- 字符串(上):https://developer.aliyun.com/article/1528743
4.5 替换字符串
字符串是不可变序列,所有的修改都会创建新的字符串。
使用replace()
替换,返回字符串的副本,其中出现的所有子字符串old都将被替换为new,如果给出了可选参数count,则只替换count次出现。
str.replace(old,new[,count]) str1 = 'www.mysite.cn' print(str1.repalce('mysite','mysql')) # www.mysql.cn
使用expandtabs()
替换,返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每个tabsize 个字符设为一个制表位,默认值8设定的制表位在列0、8、16…。
str.expandtabs(tabsize=8) print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格 print(len('1\t1'.expandtabs(8))) # 输出 9,1后面添加了7个空格 print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格 print(len('123456781\t1'.expandtabs(8))) # 输出 16,1后面添加了7个空格
使用maketrans()
,返回一个可供translate()
使用的转换对照表,进一步使用translate(),返回原字符串的副本,其中每个字符按给定的转换表进行映射。
str.maketrans(intab,outtab[,delchars]) bytes.maketrans(intab,outtab) bytearray.maketrans(intab,outtab) str.translate(table) bytes.translate(table[,delete]) bytearray.translate(table[,delete]) a = b"ABCDEFGHIJKLMNOPORSTUVWXYZ" # 大写字节型字符集 b = b"abcdefghijklmnopqrstuvwxyz" # 小写字节型字符集 d = b"THON" # 删除字节型字符集 t1 = bytes.maketrans(a,b) # 创建字节型字符映射转换表 s = b"PYTHON" # 原始字节串 s = s.translate(None, d) # 若table 参数为 None,则只删除不映射 s = s.translate(t1) # 执行映射转换 print(s) # 输出为 b'py'
4.6 裁切字符串
使用strip()
,返回原字符串的副本,移除其中的前导和末尾字符;chars 参数为指定要移除字符的字符串,如果省略或为None,chars 参数默认移除空格符。lstrip()
返回原字符串副本,移除其中的前导字符。rstrip()
返回原字符串副本,移除其中的末尾字符。
str.strip([chars]) str.lstrip([chars]) str.rstrip([chars]) print('www.example.com'.strip('cmowz.')) print(' www.example.com '.strip()) # 'www.example.com' print(' www.example.com '.lstrip()) # 'www.example.com ' print(' www.example.com '.rstrip()) # ' www.example.com'
4.7 转换大小写格式
可以使用以下三种方法检测字符串的大小写格式:
islower()
:检测字符串是否为纯小写的格式。isupper()
:检测字符串是否为纯大写的格式。istitle()
:检测字符串是否为“标题化“格式。
字符串大小写格式转换有6种方法:
lower()
:返回原字符串的副本,其中所有区分大小写的字符均转换为小写。upper()
:返回原字符串的副本,其中所有区分大小写的字符均转换为大写。title()
:返回原字符串的标题副本,每个单词第一个字母为大写,其余字母为小写。
capitalize()
:返回原字符串的副本,其首个字符大写,其余为小写。swapcase()
:返回原字符串的副本,其中大写字符转换为小写,反之亦然。casefold()
:返回原字符串消除大小写的副本。
print('Python'.islower()) # False print('Python'.isupper()) # False print('Python'.istitle()) # True print('Python'.lower()) # python print('Python'.upper()) # PYTHON print('HELLO PYTHON'.title()) # Hello Python print('HELLO PYTHON'.capitalize()) # Hello python print('HELLO PYTHON'.swapcase())# hello python print('HELLO PYTHON'.casefold())# hello python
4.8 检测字符串类型
检测数字、字母和特殊字符:
isascii()
:如果字符串为空或所有字符都是ASCII,返回True,否则False。ASCII范围是U+0000~U+007F。isdecimal()
:如果字符串中的所有字符都是十进制字符,且该字符串至少有一个字符,则返回True,否则False。十进制字符指可以用来组成十进制数的字符,如U+0660,即数字0。isdigit()
:如果字符串中所有字符都是数字,并且至少有一个字符,返回True,否则False。数字包括十进制字符和需要特殊处理的数字,如上标数字、Kharosti数等,即具有 Numerie_Type=Dight 或Numeric_Type=Decimal 特性的字符。isnumeric()
:如果字符串中至少有一个字符,且所有字符均为数值字符,则返回True,否则False。数值字符就是具有Numerie_Type=Digit、Numerie_Type=Decimal 或Numeric_Type=Numeric特性的字符。isalpha()
:如果字符串中的所有字符都是字母,并且至少有一个字符,则返回True,否则False。字母字符是指在Unicode字符数据库中定义的Letter的字符。isalnum()
:如果字符串中的所有字符都是字母或数字,且至少有一个字符,则返回True,否则False。如果c.isalpha()、c.isdecimal()、c.isdigit()或c.isnumeric()之中有一个返回True,则字符c是字母或数字。isspace()
:如果字符串中只有空白字符,且至少有一个字符则返回True,否则返回False。isprintable()
:如果字符串中所有字符均可打印或字符串为空,则返回True,否则False。
isidentifier()
:如果字符串是有效标识符,返回True,否则返回False。
isdigit()
、isdecimal()
和isnumeric()
方法都是用来检测数字,但是也有差异:
isdigit()
True:Unicode数字、全角数字(双字节)、bytes数字(单字节)。
False:汉字数字、罗马数字、小数。
Error:无isdecimal()
- True:Unicode数字、全角数字(双字节)。
False:汉字数字、罗马数字、小数。
Error:byte数字(单字节)。 isnumeric()
True:Unicode数字、全角数字(双字节)、汉字数字
False:罗马数字、小数。
Error:byte数字(单字节)。
罗马数字:I、II、III、IV、V、VI、VII、VIII、IX、X等;
汉字数字:一、二、三、四、五、六、七、八、九、十、百、千、万、亿、兆、零、壹等。
4.9 填充字符串
str.center(width[,filcher])
:返回长度为width的字符串,居中显示。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。str.ljust(width[,filcher])
:返回长度为width的字符串,靠左对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。str.rjust(width[,filcher])
:返回长度为width的字符串,靠右对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。str.zfill(width)
:返回原字符串的副本,在左边填充ASCII格式的‘0’,使其长度变为width。正负值前缀(‘+’/‘-’)的处理方式是在正负符号之后填充而非在之前。如果width小于等于len(s),则返回原字符串的副本。
s1 = "Python" print(s1.center(20,"_")) # _______Python_______ print(s1.ljust(20,"_")) # Python______________ print(s1.rjust(20,"_")) # ______________Python
4.10 检索字符串
str.count(sub[,start[,end]])
:返回子字符串sub在[start,end]范围内非重叠出现的次数。可选参数start和end被解读为切片表示法,默认值为0和字符串的长度len(str)。str.endswith(suffix[,start[,end]])
:如果字符串以指定suffix结束,则返回True,否则False。suffix也可以为由多个供查找的后缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。str.startswith(prefix[,start[,end]])
:如果字符串以指定prefix开始,则返回True,否则False。preffix也可以为由多个供查找的前缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。str.find(sub[,start[,end]])
:返回子字符串sub在str[start:end] 切片内被找到的最小索引。如果sub未被找到则返回-1。str.rfind(sub[,start[,end]])
:返回子字符串sub在字符串内被找到的最大(最右)索引。如果sub未被找到则返回-1。
str.index(sub[,start[,end]])
:类似find(),当找不到sub时引发ValueError异常。str.rindex(sub[,start[,end]])
:类似rfind(),当找不到sub时引发ValueError异常。
str ="海水朝朝朝朝朝朝朝落,浮云长长长长长长长消" print(str.count"长", 11,21)) # 输出为 7 # 检测字符串“海”是否在字符串的开头或结尾 print(str.startswith("海")) # True print(str.endswith("海")) # False # 检素“长”在字符串中的索引位置。 prin(str. find("长") # 在整个字符串中检素,输出为 13 pprint(str. find(”长",14)) # 从下标 14 位置开始检素,输出为 14 print str. Find("长",10,13) # 在下标 10~13 内检素,输出为 -1,没有找到 print(str.rfind("长")) # 在整个字符串中检素,输出为 19 prinu(str.rfind("长",14)) # 从下标 14位留开始检索,输出为 19
5. 格式化样式
5.1 printf 风格字符串
format % values
其中,format 为一个字符串,在format 中的%转换标记符将被替换为零个或多个 values 条目。
如果 format 要求一个单独参数,则values 可以为一个非元组对象;否则,values 必须是一个包含项数与格式字符串中指定的转换符项数相同的元组,或者是一个单独映射对象,如字典。
转换标记符包含两个或更多个字符,并具有以下组成,且必须遵循下面的先后顺序。
%:用于标记转换符的起始。
映射键(可选):由加圆括号的字符序列组成,如(keywordname)。
最小字段宽度(可选):如果指定为*(星号),则实际宽度从 values 元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。
精度(可选)。在 .(点号)之后加精度值的形式给出。如果指定为*(星号),则实际精度从 values元组的下一元素中读取,要转换的对象则为精度之后的元素。
长度修饰符 (可选):包括h、1或L,在Python 中可以被忽略。如%1d 等价于%d。
当右边的values 参数为一个字典或其他映射类型时,宇符串中的格式必须包舍加圆括号的映射键,对应%字符之后字典中的每一项。映射键将从映射中选取要格式化的值。例如:
print('%(language)s%(number)02d'%{'language':'Python','number':3}) # Python03
格式化输出字符串和整数
str1 = "%.length = %d" % (Python', len(Python')) print(str1) # 输出为 Python.length =6
格式化输出不同进制数
n = 1000 print("Hex = %x Dec = %d Oct = %o" % (n, n, n)) # 输出为 Hex -3c8 Dec = 1000 Oct = 1750
格式化输出浮点数
pi = 3.141592653 print('pi1 = %10.3f' % pi) # pi1 = 3.142 print('pi2 = %.*f' % (3, pi)) # pi2 = 3.142 print('pi3 = %010.3f' % pi) # pi3 = 000003.142 print('pi4 = %-10.3f' % pi) # pi4 = 3.142 print('pi5 = %+f' % pi) # pi5 = +3.141593
5.2 format 格式化
str.format()
通过{}
操作符和:辅助指令代替%操作符。
print('{0} (1}'.format('Python', 3.0)) # 输出为 Python 3.0 print('{}{}'format('Python', 3.0)) # 输出为 Python 3.0 print('{1} {0} {1)'.format('Python', 3.0)) # 输出为 3.0 Python 3.0
在字符串中使用台作为格式化操作符。与%操作符不同的是,{}操作符可以通过包含的位置值自定义引用值的位置,也可以重复引用。
print('{name};年龄是{age}岁。'.format(age=18, name='张三')) # 张三年龄是18岁。 l = ['张三',18] print('{l[0]}年龄是{l[1]}岁。'.format(1)) # 填充与对齐 print('{:>8}'.format('1')# 右边对齐,默认空格填充,总宽度8 print('{:0>8}'.format('1') # 右对齐,0填充,总宽度8 print('{:a<8}'.format('1') # 左对齐,a填充,总宽度8 # 精度与类型f print('{:2f}'.format(3.1415926))# 输出为 3.14 # 不同进制数字 n = 100 print('{:b}'.format(n)) # 1100100 print('{:d}'.format(n)) # 100 print('{:o}'.format(n)) # 144 print('{:x}'.format(n)) # 64 # 千位分隔符 print('{:,}' format(1234567890)) # 1,234,567,890
5.3 f-strings
在字符串前加上f修饰符,字符串中使用{}包括:表达式;
name = "Python" # 字符串 ver = 3.6 # 浮点数 print( f"{name}-{ver}、{ver+0.1}、{ver+0.2}") # Python-3.6、3.7、3.8000000000000003
注意:特殊格式化修饰符通过冒号与前面的表达式相连,1f表示仅显示1位小数。