字符串是python中一个极为重要的数据类型,他的效应特别有力,应用为甚大规模,它好代表符号和词语、载入到文本文件被作为内容、Internet网址与python程序,它是python中颇为关键的拍卖工具集。

字符串常量

  字符串常量使用起来最为简约好,唯一不同强人意可能是他的编辑方式各种各样:

  单引号:’jeff”D’;

  双引号:”jeff’D”;

  三引号:”’jeffD”’,”””jeffD”””;

  转义字符:”j\teff\nD”;

  Raw字符串:r”C:\new\test.py”;

  还有bytes类型与Unicode类型字符串:b’jeffD’,u’jeffD’;

  对于python中字符串的援,单对引号并无强引用弱引用的概念,他们是可交换的,代表一律种植意思,之所以发生应声片种艺术是为好简化一些欲转义的字符串,例如:’jef\’D’简化为’jef”D’,代码更为简单易亮。

转义序列代表特殊字节

  反斜杠用来开转义字符在博地方都于使,同样这吗以在字符串常量中。\跟同到多只字符,在python解释器会于单个字符代替,这个字符通过转义序列定义一个亚前行制值。

print(len('jeff\tD\n'))
运行结果:
6

  这里\t与\n都只当做一个字符。python中有套之转义字符序列。

  \newline 忽视(连续)

  \\ 反斜杠(即\)

  \’ 就是’

  \” 就是”

  \a 响铃

  \b 倒退

  \f 换页

  \n 换行

  \r 返回

  \t 空格制表符

  \v 垂直制表符

  \N{id} Unicode数据库id

  \uhhhh Unicode16位16进制值

  \Uhhhhhhhh Unicode32位16进制值

  \xhh 十六进制值

  \ooo 八上制值

  \0 Null(不会见终结字符串)

  \other 保留

  如果\末尾和的莫是一个但转义字符,就见面因为\的花样出现于最后之字符串里。

print('jef\D')
运行结果:
jef\D

  有些时候咱们盼望\每当字符串中未进行转义,这个时段便因故到raw字符串抑制转义。

print("C:\new\test.py")
print(r"C:\new\test.py")
运行结果:
C:
ew    est.py
C:\new\test.py

  raw字符串在这边的图就是关门转义机制。我们还可以就此其他一样种植方式,就是用有限单\取而代之一个\。

print("C:\\new\\test.py")
运行结果:
C:\new\test.py

  值得注意的凡,即使是raw字符串也未得以用\结尾,\会转义后续引用的字符。也就是说r”…\”不是一个卓有成效的字符串。并且奇数个\为未是中的字符串常量。

  有三栽艺术可缓解奇数个字符串常量的艺术:

print(r"C:\new\test\\"[:-1])
print("C:\\new\\test\\")
print(r"C:\new\test"+'\\')
运行结果:
C:\new\test\
C:\new\test\
C:\new\test\

  三还引号的字符串

  三挑起号字符串也如作块字符串,可以操作任意多行的字符串,在次要输入多行文本的时光,比如在来源文件被编辑HTML或XML代码,直接以这样的块字符串代替外部文本是极为便利之。并且他尚长长用来开注解使用,当我们要差不多行做注解时,有些工具不能够以快捷方式进行多行#不时,这种方式显得更简便。不仅是注释,某些时刻我们用取消一些代码时也可采取这种艺术隐去不需要的代码。

字符串基本操作

  首先,必须旗帜鲜明的一点是,字符串是一个不可变数据类型,我们所开的满贯操作都并未改变原来的字符串,只是开辟出新的上空存放改变后的字符串,并且将变量指向新的字符串,我们肉眼所观看底以为是字符串变了,其实底层的字符串并不曾变化。这当操作字符串时必要是铭记在心。

a='asdfg'
b='adf'
c='sdf'
print(b in a)
print(c in a)
运行结果:
False
True

  以字符串中操作符重载发生作用,+与*以字符串在的操作也字符串拼接和重复的意思。与in判断类似之是find方法,in返回布尔值,而find方法会返回索引值,找不顶则会报错。

  同时字符串也是只是迭代对象,我们可以运用for循环遍历它。

  字符串的目与片

  和有着有序类型一样,字符串也支撑索引好切片的操作。python的目录支持负偏移方法从序列中获取元素,并且负偏移和字符串长度相加就是这元素的正偏移量。我们简要的人为是由结束处倒在计数即可。

  字符串切片使用冒号分割偏移索引字符串中连连的情返回新的价。

  索引:

  1.首先单元素的偏移量为0;

  2.负偏移代表从右边为左计数;

  3.S[0]博第一个元素;

  4.S[-2]与S[len(S)-2]凡是同一个因素。

  切片:

  1.S[i:j:k]i与j是偏移量,k是步进,i与j默认是0同len(S);

  2.S[1:3]指从偏移为1之因素,到可非包3底要素;

  3.S[1:]表示偏移呢1届终极之间的素;

  4.[:3]意味着从今初步到不包索引为3中间的元素;[:-1]合字符串的素,除了最后一个因素外的有所;

  5.[:]顶层拷贝,整个字符串。

  当步进为负数的时节表示于右边为左,实际效果就是反转之阵。

name= 'jeffD'
print(name[::-1])
运行结果:
Dffej

  切片时常使用在读取文件内容常常,字符串使用‘\n’换行符结尾,line[:-1],就得提本行内容。除此之外还好下strip方法。

  字符串转换工具

  之前在整形常量中也介绍了+在数字型受到举行数学加法计算,而于字符串中召开并接符号使用。那么自己怀念使受字符串和数字以+,必然会促成一个破绽百出,我们要急需这样做就待利用到字符串转换工具,让她们具有同等之项目然后操作。

print(1+'11')
运行结果:
    print(1+'11')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

print(str(1)+'11')
print(1+int('11'))
运行结果:
111   (str)
12    (int)

  当然我们尚好应用eval()函数来形成这项操作。

print(1+eval('11'))
运行结果:
12

  ord()函数可以以str转换成为相应的ASCII码,chr()执行反操作,将ASCII码转化为相应的字符。

  下面是以此函数的使用,将二进制转化为十进制。

i=0
b='1011'
while b!='':
   i=i*2 +(ord(b[0])-ord('0'))
   b=b[1:]
print(i)
运行结果:
11

字符串常用方法

  首先方法特定于对象类型,所以字符串方法就适用于字符串类型。

  replace()方法:

a='jeff'
print(a.replace('ff','dd'))
运行结果:
jedd

  replace()方法同样于:

a='jeff'
print(a[0:2]+'dd')
输出结果:
jedd

a='jeff'
print(a.replace('f','d',1))
运行结果:
jedf

  find()方法:

a='jeff'
print(a.find('f'))
运行结果:
2

  join方法:

a='jeff'
print(','.join(list(a)))
运行结果:
j,e,f,f

  于文件分析的长河遭到待用及点子,首先文本分析就是如经过切片从原字符串中分离有我们怀念如果的内容。

a='jeff,boy,cool'
print(a.split(','))
print(a.split(',')[0])
运行结果:
['jeff', 'boy', 'cool']
jeff

  除此之外,字符串还有许多方式,这里虽不一一列举了,在前的学习里呢学了众多连锁的法,多用自就是见面了。

字符串格式化

  字符串格式化允许以一个么步骤中针对一个字符串进行多个特定项目替换。目前起星星点点栽格式化实现方式:1.字符串格式化表达式;2.字符串格式化方法调用。

  字符串格式化表达式:

  在字符串表达式中我们使用%作为操作符,在%的左边停放需要开展格式化的字符串,字符串中连至少一个置于目标(%[d]品种存放),在%的下手放置需要停放的对象本体,此目标见面代替左侧的内置目标。

a='name is %s,age is %d'%('jeff',111)
print(a)
运行结果:
name is jeff,age is 111

  字符串格式化代码:

格式化符号

意义

%c

转换成字符(ASCII 码值,或者长度为一的字符串)

%r

优先用repr()函数进行字符串转换

%s

优先用str()函数进行字符串转换

%d / %i

转成有符号十进制数

%u

转成无符号十进制数

%o

转成无符号八进制数

%x / %X

转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)

%e / %E

转成科学计数法(e / E控制输出e / E)

%f / %F

转成浮点数(小数部分自然截断)

%g / %G

%e和%f / %E和%F 的简写

%%

输出% (格式化字符串里面包括百分号,那么必须使用%%)

  表达式的左手的放目标支持多操作,但是转换目标语法却非常谨慎,转换的对象语法标准呢:%[(name)][flags][width][.precision]typecode。

  %同中转符中还可增长各种操作:放置字典的键;罗列左对齐(-),正负号(+)和补零(0)的表明位;给来数字完全尺寸以及小数点后底位数等。width和percision都好编码一个*,指定他们应有于输入值的下同样件取值。

print('name is %s,%d'%('jeff',111))
print('name is %-6s,%-6d'%('jeff',111))
print('name is %06s,%06d'%('jeff',111))
print('name is %+6s,%+6d'%('jeff',111))
运行结果:
name is jeff,111
name is jeff  ,111   
name is   jeff,000111
name is   jeff,  +111

a=3.1415926
print('%e'%a)
print('%f'%a)
print('%g'%a)
print('%-6.2f'%a)
print('%06.2f'%a)
print('%+06.2f'%a)
print('%.*f'%(4,a))
运行结果:
3.141593e+00
3.141593
3.14159
3.14  
003.14
+03.14
3.1416

  可以指定通过测算得出width和precision。

  基于字典的字符串格式化

  将%右边写成字典,提取其中的价值。这在转类似HTML或XML程序中时时会采取到立刻同一技。

print('name is %(name)s,age is %(age)d'%{'name':'jeff','age':111})
运行结果:
name is jeff,age is 111

  字符串格式化调用方法:

  format方法以主体字符串作为模板,并且吸纳任意多之要同模板替换的值得参数。主体字符串中,花括号通过岗位{1}或{name}指出替换目标与将插入的参数。

print('name is {0},age is {1}'.format('jeff',111))
输出结果:
name is jeff,age is 111

print('name is {name},age is {age}'.format(name='jeff',age=111))
输出结果:
name is jeff,age is 111

print('name is {0},age is {age}'.format('jeff',age=111))
运行结果:
name is jeff,age is 111

  format方法还有更为复杂的操作来支撑高级用途。

import sys
a='my {1[spam]} runs {0.platform}'.format(sys,{'spam':'computer'})
print(a)
运行结果:
my computer runs win32

import sys
a='my {config[spam]} runs {sys.platform}'.format(sys=sys,config={'spam':'computer'})
print(a)
运行结果:
my computer runs win32

  格式化字符串中[]遭逢指定了字典的键,点表示有关字符串引用的一律件对象属性。[]中尚可指定列表等行列偏移量的目录,这种方法只有单个正偏移才行。这种办法要惦记使负偏移或分片或者其他办法都须于字符串方法格式化进行事先形成。

a=[1,2,3]
print('1={0[0]},2={0[1]},3={0[2]}'.format(a))
运行结果:
1=1,2=2,3=3

a=[1,2,3]
print('1={0},2={1},3={2}'.format(a[0],a[1],a[2]))
运行结果:
1=1,2=2,3=3

a=[1,2,3]
b=a[0],a[-2],a[0:2]
print('1={0},2={1},3={2}'.format(*b))
运行结果:
1=1,2=2,3=[1, 2]

  除了上述我们尚加加了额外的语法来落实层级。即于目标标识后下冒号后面更指定字段大小、对齐方式和一个一定项目的编码的格式化声明。

  格式化字符串语法:{fieldname:conversionflag:formatspec},其中fieldname是指定参数的一个数字要重点字,后面和可选的.name或[index],conversionflag为r、s、a分别以该值对应reper、str、ascii内置函数调用,formatspec指定该值的字段宽度、对齐方式、补零、小数点精度等。

  formatspec的组成描述:[[fill]align][sign][#][0][width][.precision][typecode]

  其中align用<,>,=,^,分别表示左对联合,右对联合,一个符号字符后补、居中对合。formatspec包含带嵌套,只含有{}的格式化字符串。{0:10}表示第一只参数个富有10字符,{1:<10}表示第二独参数员富有10字符并且左对共同。{0.platform:>10}表示第一单参数platform属性在10字符位宽的字段右对联合。

print('{0:10} ={1:<10}'.format('jeff',111.11))
运行结果:
jeff       =111.11  

  {2:g}第三只参数根据‘g’浮点数操作,{1:.2f}则是简单号小数的‘f’浮点数,{2:06.2f}表示第二单参数添加为6只字符宽度字段并于左手补充0两各小数的‘f’浮点数。当然方法格式化也支撑二进制,八进制,十六进制。

  方法格式化的略补:

print('{0:.{1}f}'.format(1/3.0,4))
运行结果:
0.3333

print(format(1/3,'.2f'))
运行结果:
0.33

少数种植格式化方法的比

  格式化表达式:

  1.相对而言叫格式化方法调用更为简易,更为简易;

  2.每当此后的本可能会见为删除;

  格式化方法:

  1.甩卖重大字,属性引用,二前行制代码更为好。

  2.尽管错综复杂,但是有多高等功能,这是格式化表达式没有的职能;

  3.以代值引用方面再次显眼;

  4.考虑操作符会有一个重复爱记忆的法子名;

  5.不支持单个或多只代表值大小写的不等语法。

  本文是以阅读完python学习手册后展开的粗略收拾,如有知识性错误,请各位大神帮忙指正。

相关文章

网站地图xml地图