所有标准序列操作(索引、切片、乘法、成员检查、长度、最小值、最大值)都适用于字符串,但是字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" >a = 'http://www.python.org' <br>a[ - 3 :] = 'com' <br>Traceback (most recent call last):<br> File "<pyshell#6>" , line 1 , in <module><br> a[ - 3 :] = 'com' <br>TypeError: 'str' object does not support item assignment<br>< / span> |
python提供了多种字符串设置方法,以前,主要的解决方法是使用字符串格式设置运算符-百分号。这个运算符的行为类似C语言中的景点函数printf:在%左边制定一个字符串,并在右边指定要设置其格式的值。指定要设置其格式的值,可使用单个值,可使用元组或字典。
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > format = 'http:// %s.%s.org' <br>values = ( 'www' , 'python' )<br> format % values<br> 'http:// www.python.org' <br>< / span> |
上述%s称为转换说明符,指出了要将值插入的地方,s意味着将值视为字符串进行格式设置。如果指定的不是字符串,将使用str将其转换为字符串,其他说明符将导致其他转换形式。
常用的另一种方式
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > "{},{},and {}" . format ( "first" , "second" , "third" )<br> 'first,second,and third' <br> "{1},{0},{3},{2}" . format ( "first" , "second" , "third" , "four" )<br> 'second,first,four,third' <br> "{0},{1},{2},{3}" . format ( "first" , "second" , "third" , "four" )<br> 'first,second,third,four' <br>< / span> |
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > # 调用math中的pi模块<br>from math import pi<br>"{name} is approximately {value:.3f}.".format(value=pi,name="π") <br>'π is approximately 3.142.'<br></span> |
这里value:.3f制定了格式说明符,意味着使用3位小数的浮点数格式。
如果变量与替换字段同名,可使用
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > from math import e<br> f "Euler's constant is roughly {e}." <br> "Euler's constant is roughly 2.718281828459045." <br>同比:<br> "Euler's constant is roughly {e}." . format (e = e)<br> "Euler's constant is roughly 2.718281828459045." <br>< / span> |
设置字符串格式
组成部分:字段名、转换标志、格式说明符。
字段名:索引或标识符,指出要设置那个值的格式并使用结果来替换该字段。除指定值外,还可指定值的特定部分,如元素。
转化标志:跟在叹号后面的单个字符,当前支持字符包括r(repr)、s(str)、a(ascii)。如果制定了转换标志,将不适用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,在做进一步的格式设置。
格式说明符:跟在冒号后面的表达式,格式说明符让我们能够详细地制定最终的格式,包括格式类型(如字符串,浮点数或十六进制)。
替换字段名
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > "{} {} {} {}" . format ( 1 , 2 , 3 , 4 ) <br> '1 2 3 4' <br> #通过索引来指定那个字段中对应的未命名参数。<br>"{0} {3} {1} {2}".format(1,2,3,4) <br>'1 4 2 3'<br></span> |
基本转换
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > print ( "{pi!s} {pi!r} {pi!a}" . format (pi = "π" )) <br>π 'π' '\u03c0' <br>< / span> |
分别使用str、repr、ascii进行转换
还可以指定转换值的类型
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > "The number is {}" . format ( 42 ) <br> 'The number is 42' <br> "The number is {:f}" . format ( 42 ) <br> 'The number is 42.000000' <br>< / span> |
或二进制格式
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > "The number is {:b}" . format ( 42 ) <br> 'The number is 101010' <br>< / span> |
字符串格式设置类型说明符
整型:
b 二进制
c 字符型,把数字转成表示unicode的字符
d 十进制
o 八进制
x 十六进制,显示小写字母
X 十六进制,显示大写字母
n 与d行为相同,使用本地的数字表示方式
''(空,没有空格) 与d相同
浮点数
e 科学计数法表示,小写e
E 科学计数法表示,大写E
f 显示为定点数,默认小数点后六位
F 同f
g 自动选择是否用科学记数法表示
G 同g
n 同g,使用本地表示方式
% 使用百分比表示
''(空) 同g
宽度、精度、和千位符
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > "{number:10}" . format (number = 3 ) <br> ' 3' <br> "{name:10}" . format (name = "andy" ) <br> 'andy <br> "Pi day is {pi:10.3f}".format(pi=pi) <br>' Pi day is 3.142 ' ' <br> # 或千位符<br>"This is {:,}".format(10**10) <br>'This is 10,000,000,000'<br></span> |
符号、对齐及填充
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > '{:010.2f}' . format (pi) <br> '0000003.14' <br> print ( '{0:<10.2f}\n{0:>10.2f}\n{0:^10.2f}' . format (pi)) <br> 3.14 <br> 3.14 <br> 3.14 <br> # 可以制定字符作为填充字符 <br>"{:$^15}".format(" hello ")<br>'$$$$ hello $$$$'<br><br>print('{0:10.2f}\n{1:10.2f}'.format(pi,-pi))<br> 3.14<br> -3.14<br> <br>print('{0:10.2f}\n{1:=10.2f}'.format(pi,-pi))<br> 3.14<br>- 3.14<br><br>print('{0:-.2f}\n{1:-.2f}'.format(pi,-pi))<br>3.14<br>-3.14<br><br>print('{0:+.2f}\n{1:+.2f}'.format(pi,-pi))<br>+3.14<br>-3.14<br><br>print('{0:+10.2f}\n{1:+10.2f}'.format(pi,-pi))<br> +3.14<br> -3.14<br> <br>print('{0: .2f}\n{1: .2f}'.format(pi,-pi))<br> 3.14<br>-3.14<br><br>"{:b}".format(42)<br>'101010'<br>"{:#b}".format(42)<br>'0b101010'<br>"{:#g}".format(42)<br>'42.0000'<br></span> |
字符串常用方法
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" >center通过在两边添加填充字符(默认为空格)让字符串居中<br> "Hi,How old are you" .center( 30 )<br> ' Hi,How old are you ' <br> "Hi,How old are you" .center( 30 , "*" )<br> '******Hi,How old are you******' <br><br>find在字符串中查找子串,如果找到,就返回子串的第一个字符的索引,否则返回 - 1 。<br> "Hi,How old are you" .find( "old" )<br> 7 <br>tmp = "hello,welcome to you" <br>tmp.find( 'hi' )<br> - 1 <br>还可以指定搜索的起点与终点<br>tmp.find( "hi" , 0 , 10 )<br> - 1 <br><br>join用于合并字符串<br>s = [ '1' , '2' , '3' , '4' ]<br>s1 = "+" <br>s1.join(s)<br> '1+2+3+4' <br> dir = ' ',' usr ',' bin ',' env '<br>' / '.join(dir)<br>' / usr / bin / env '<br>print(' C: ' + ' \\ '.join(dir))<br>C:\usr\bin\env<br><br>lower转换小写<br>' HELLOWORLD '.lower()<br>' helloworld'<br>< / span> |
replace替换将指定字符串替换成另一个字符串,并返回替换后结果。
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > str = "This is a test" <br> str .replace( "is" , "was" )<br> 'Thwas was a test' <br>< / span> |
split拆分字符串为序列
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > num = '1+2+3+4' <br>num.split( "+" )<br>[ '1' , '2' , '3' , '4' ]<br> '/usr/bin/env' .split( '/' )<br>[' ', ' usr ', ' bin ', ' env']<br>< / span> |
strip删除行首与行尾的空白行,并返回删除后的结果
1 | <span style = "font-family: 微软雅黑, 'Microsoft YaHei';" > ' hello world ' .strip()<br> 'hello world' < / span> |