所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用
但是字符串都是不可变的,即类似分片赋值操作是不合法的
1.字符串格式化
使用字符串格式化操作符%来实现
%转换标志(可选)最小字段宽度(可选).精度值(可选)转换类型(s,f,c)
%:标记转换说明符的开始
转换标志(可选): -表示左对齐
+表示在转换值之前要加上正负号
“”(空白字符)表示正数之前保留空格
0表示转换值若位数不够则用0填充
最小字段宽度(可选):
转换后的值所保留的最小字符个数,如果是*则宽度会从值元组中读出
点(.)后跟精度值(可选):
如果转换的是实数,精度值就表示出现在小数点后的位数
如果转换的是字符串,那么该数字表示转换后的值所能包含的最大字符个数
如果是*,那么精度将会从元组中读出
格式化字符串的%s部分称为转换说明符,标记了需要插入转换值的位置
format="Hello, %s %s enough for ya?"
%左侧放置待格式化字符串,右侧则放置希望格式化的值(可以是一个字符串或数字,也可以是含多个值的元组或字典)
format="Hello, %s %s enough for ya?"
values=('world','Hot')
print(format % values) #Hello, world Hot enough for ya?
如果需要转换的元组是作为表达式的一部分存在,则需要将它用圆括号括起来
print(format % ('world','Hot')) #Hello, world Hot enough for ya?
当右操作数是元组时,其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符
print('%s plus %s equals %s' % (1,1,2)) #1 plus 1 equals 2
如果要格式化浮点数,可以使用f说明符类型,同时提供所需要的精度(希望保留的小数位数)
print("Hello, %.0f"%2022) #Hello, 2022
1.1 字符串格式化转换类型:
print("带符号的十进制整数(42):",'%d' % 42) #带符号的十进制整数(42): 42
print("带符号的十进制整数(42):",'%i' % 42) #带符号的十进制整数(42): 42
print("不带符号的八进制(42):",'%o' % 42) #不带符号的八进制(42): 52
print("不带符号的十进制(42):",'%u' % 42) #不带符号的十进制(42): 42
print("不带符号的十六进制(42)小写:",'%x' % 42) #不带符号的十六进制(42)小写: 2a
print("不带符号的十六进制(42)大写:",'%X' % 42) #不带符号的十六进制(42)大写: 2A
print("科学计数法表示的浮点数(2022.01)小写:",'%e' % 2022.01) #科学计数法表示的浮点数(2022.01)小写: 2.022010e+03
print("科学计数法表示的浮点数(2022.01)大写:",'%E' % 2022.01) #科学计数法表示的浮点数(2022.01)大写: 2.022010E+03
print("十进制浮点数(2022.01):",'%.2f' % 2022.01) #十进制浮点数(2022.01): 2022.01
print("十进制浮点数(2022.01):",'%.2F' % 2022.01) #十进制浮点数(2022.01): 2022.01
print("单字符(S):",'%c' % 'S') #单字符(S): S
print("字符串(2022.01)-使用repr转换任意Python对象:",'%r' % 2022.01) #字符串(2022.01)-使用repr转换任意Python对象: 2022.01
print("字符串(Hello,world)-使用str转换任意Python对象:",'%s' % 'Hello,world') #字符串(Hello,world)-使用str转换任意Python对象: Hello,world
1.2 字段宽度和精度
字段宽度是转换后的值所保留的最小字符个数
精度(对于数字转换来说) 则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后
的值所能包含的最大字符个数
from math import pi
print("字段宽度(pi):","%10f" % pi) #字段宽度(pi): 3.141593
print("字段精度(pi):","%10.2f" % pi) #字段精度(pi): 3.14
在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、减号或空格
零表示数字将会用0进行填充
print("%010.2f" % pi) #0000003.14
#字符串格式化示例:使用给定的宽度打印格式化后的价格列表
# width=int(input('Please enter width: '))
width=50
price_width=10
item_width=width-price_width
header_format='%-*s%*s'
format='%-*s%*.2f'
print('='*width)
print(header_format % (item_width,'Item',price_width,'Price'))
print('-'*width)
print(format % (item_width,'Apples',price_width,0.4))
print(format % (item_width,'Pears',price_width,0.5))
print(format % (item_width,'Cantaloupes',price_width,1.92))
print(format % (item_width,'Dried Apricots (16 oz.)',price_width,8))
print(format % (item_width,'Prunes (4 lbs.)',price_width,12))
print('='*width)
# ==================================================
# Item Price
# --------------------------------------------------
# Apples 0.40
# Pears 0.50
# Cantaloupes 1.92
# Dried Apricots (16 oz.) 8.00
# Prunes (4 lbs.) 12.00
# ==================================================
2.字符串方法
一些有用的字符串常量:
string.digits:包含数字0~9的字符串
string.letters:包含所有字母(大写或小写)的字符串
string.lowercase:包含所有小写字母的字符串
string.printabie:包含所有可打印字符的字符串
string.punctuation:包含所有标点的字符串
string.uppercase: 包含所有大写字母的字符串
字母字符串常量(例如string.letters )与地区有关(其具体值取決于Python所配置的语言)
如果可以确定自己使用的是ASCI,那么可以在变量中使用ascii_前缀,如:string.ascii_letters
find函数:查找子字符串,返回子串第一个字符所在位置
还可以接受可选的起始点和结束点参数
如果返回值为0,说明在索引0的位置找到了子串
title="Monty Python's Flying Circus"
print(title.find('on')) #1
print(title.find('on',2,16)) #10
print(title.find('Monty')) #0
join函数:在队列中添加元素
seq=['1','2','3','4','5']
sep='+'
print(sep.join(seq)) #1+2+3+4+5
dirs='','usr','bin','env' #元组
print('/'.join(dirs)) #/usr/bin/env
split函数:将字符串分割成序列
如果不提供分隔符,系统会把所有空格作为分隔符
print('1+2+3+4+5'.split('+')) #['1', '2', '3', '4', '5']
print('Trondheim Hammer Dance'.split()) #['Trondheim', 'Hammer', 'Dance']
lower函数:返回字符串的小写字母版
print('Trondheim Hammer Dance'.lower()) #trondheim hammer dance
strip函数:返回去除两侧空格的字符串
也可以指定需要去除的字符
print(' internal whitespace is kept '.strip()) #internal whitespace is kept
print('**********internal******whitespace****is!!!!!kept**!!!!!!!******'.strip('*!')) #internal******whitespace****is!!!!!kept
replace函数:返回所有匹配项均被替换之后的字符串
print('This is a test'.replace('is','eez')) #Theez eez a test
translate函数(Python2适用):替换字符串的单个字符,第二个参数用来指定需要删除的字符串
makestrans函数接收两个等长的字符串:将第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换
from string import maketrans
table=maketrans('cs','kz')
print('This is a incredible test'.translate(table))
print('This is a incredible test'.translate(table," "))