一、基本字符串操作
所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用,但是字符串都是不可变的,因此,类似以下的分片赋值是不合法的。
>>> website=’http://www.python.org’
>>> website[-3: ]=’com’
二、字符串格式化:精简版
1.字符串格式化操作符:% ,在%左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。
转换说明符:%s ,标记了需要插入转换值的位置。s表示值会被格式化为字符串,如果不是字符串,则会用str将其转换为字符串。
>>> format=’hello,%s,%s enough for ya?’
>>> values=(‘23’,’24’)
>>> print (format % values)
hello,23,24 enough for ya?
(注意:如果要在格式化字符串里面包括百分号,那么必须使用%%,这样python就不会将百分号误认为是转换说明符了。)
2.string模块提供另外一种格式化值的方法:模块字符串。substitute这个模块方法会用传递进来的关键字参数foo替换字符串中的
foo>>>fromstringimportTemplate>>>s=Template(‘
f
o
o
>>>
f
r
o
m
s
t
r
i
n
g
i
m
p
o
r
t
T
e
m
p
l
a
t
e
>>>
s
=
T
e
m
p
l
a
t
e
(
‘
x,glorious $x’)
>>> s.substitute(x=’slurm’)
‘slurm,glorious slurm’
如果替换字段是单词的一部分,那么参数名就必须用括号括起来,从而准确指明结尾:
>>> s=Template(“It’s ${x}tastic!”)
>>> s.substitute(x=’slurm’)
“It’s slurmtastic!”
三、字符串格式化:完整版
1.基本的转换说明符
(1)%字符:标记转换说明符的开始。
(2)转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负;“ ”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充。
(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。
(4)点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
(5)转换类型:
d,i:带符号的十进制整数
o:不带符号的八进制
u:不带符号的十进制
x:不带符号的十六进制(小写)
X:不带符号的十六进制(大写)
e:科学计数法表示的浮点数(小写)
E:科学计数法表示的浮点数(大写)
f,F:十进制浮点数
g:如果指数大于-4或者小于精度值则和e相同,其他情况与f相同
G:如果指数大于-4或者小于精度值则和E相同,其他情况与F相同
C:单字符(接受整数或者单字符字符串)
r:字符串(使用repr转换任意Python对象)
s:字符串(使用str转换任意Python对象)
简单转换:
>>>’Price of eggs:
‘Priceofeggs:
‘
P
r
i
c
e
o
f
e
g
g
s
:
42’
>>> ‘Hexadecimal price of eggs: %x’ % 42
‘Hexadecimal price of eggs: 2a’
>>> from math import pi
>>> ‘Pi:%f…’ % pi
‘Pi:3.141593…’
>>> ‘Very inexact esstimate of pi:%i’ % pi
‘Very inexact esstimate of pi:3’
>>> ‘Using str: %s’ % 42L
SyntaxError: invalid syntax(版本不同显示不同)
>>> ‘Using repr: %r’ % 42L
SyntaxError: invalid syntax(版本不同显示不同)
>>> ‘Using str: %s’ % 42
‘Using str: 42’
2.字段宽度和精度
转换说明符可以包括字段宽度和精度。字段宽度是转换后的值所保留的最小字符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后的值所能包含的最大字符个数。
>>> ‘pi:%f…’% pi
‘pi:3.141593…’
>>> ‘%10f’ % pi(字段宽10)
’ 3.141593’
>>> ‘%10.2f’ % pi(字段宽10,精度2)
’ 3.14’
>>> ‘%.2f’ % pi(精度2)
‘3.14’
>>> ‘%.5s’ % ‘HAIL SHELD’(最大字符个数5)
‘HAIL ‘
3.符号、对齐和0 填充
在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、减号或空格。零表示数字将会用0进行填充。
>>> ‘%010.2f’% pi
‘0000003.14’
减号(-)用来左对齐数值:
>>> ‘%-10.2f’% pi
‘3.14 ‘(数字右侧多出了额外的空格)
空格意味着在正数前加上空格。在需要对齐正负数时很有用
>>> print((‘%5d’ % 10)+ ‘\n’+(‘%5d’ % -10))
10
-10
>>> print((‘% 5d’ % 10)+ ‘\n’+(‘% 5d’ % -10))
10
-10
(前两者未看出差别,因为版本不同么,黑人问号???)
加号表示不管是正数还是负数都标示出符号
>>> print(‘%+5d’ %10)+ ‘\n’+(‘%+5d’ %-10)
+10
-10
四、字符串方法
1.字符串常量
string.digits:包含数值0-9的字符串。
string.ascii_letters:包含所有字母(大写或小写)的字符串。
string.lowercase:包含所有小写字母的字符串。
string.printable:包含所有可打印字符的字符串。
string.punctuation:包含所有标点的字符串。
string.uppercase:包含所有大写字母的字符串。
2.find:在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果没有找到则返回-1。
>>> title=”monty python’s flying circus”
>>> title.find(‘monty’)
0
>>> title.find(‘python’)
6
>>> title.find(‘marvel’)
-1
这个方法还可以接受可选的起始点和结束点参数:
>>> subject= ‘$$$ get rich now!!! $$$’
>>> subject.find(‘$$$’)
0
>>> subject.find(‘$$$’,1) #只提供起点
20
>>> subject.find(‘!!!’)
16
>>> subject.find(‘!!!’,0,16) #提供起始点和结束点
-1
3.join:用于在队列中添加元素。
join是split方法的逆方法,用来连接序列中的元素。被连接的序列元素必须都是字符串。
>>> seq=[1, 2, 3, 4, 5]
>>> sep = ‘+’
>>> sep.join(seq)
Traceback (most recent call last):
TypeError: sequence item 0: expected str instance, int found
>>> seq = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
>>> sep = ‘+’
>>> sep.join(seq)
‘1+2+3+4+5’
>>> dirs=”, ‘user’, ‘bin’, ‘env’
>>> ‘/’.join(dirs)
‘/user/bin/env’(这里没太懂。。。)
>>> print (‘c:’+’\’.join(dirs))
c:\user\bin\env(这里也没懂,跟上面的分隔符号不一样。。。)
4.lower :返回字符串的小写字母版。
>>> ‘HAIL SHELD’.lower()
‘hail sheld’
>>> if ‘sheld’ in[‘SHELD’,’Sheld’,’SHeld’,’SHEld’]:print (‘find it!’)
…
>>>
>>> name=’SHELd’
>>> names=[‘SHELD’,’sheld’,’SHeld’,’SHEld’]
>>> if name.lower() in names:print (‘Found it!’)
…
Found it!
5.title:将字符串转换为标题(所有单词的首字符大写,而其他字母小写。但是它使用的单词划分方法可能会得到并不自然的结果)
>>> “that’s all folks”.title()
“That’S All Folks”
相似:string模块的capwords函数
>>> import string
>>> string.capwords(“that’s all, folks”)
“That’s All, Folks”
6.replace:返回某字符串的所有匹配项均被替换之后得到字符串。
>>> ‘this is a test’.replace(‘is’,’eez’)
‘theez eez a test’
7.split:将字符串分割成序列。是join的逆方法。
>>> ‘1+2+3+4+5’.split(‘+’)
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
>>> ‘/usr/bin/env’.split(‘/’)
[”, ‘usr’, ‘bin’, ‘env’]
>>> ‘using the default’.split()
[‘using’, ‘the’, ‘default’]
注:如果不提供任何分隔符,程序会将所有的空格作为分隔符(空格、制表、换行等)
8.strip:返回去除两侧(不包括内部)空格的字符串。
>>> ’ this is a dream! ‘.strip()
‘this is a dream!’
也可以指定需要去除的字符,将它们列为参数即可。
>>> ‘***spam*for*everone!!!***’.strip(‘*!’)
‘spam*for*everone’
9.translate:替换字符串中的某些部分,只处理单个字符,但是可以同时进行多个替换。
使用方式有很多,如替换换行符或者其他因平台而异的特殊字符。
在使用translate转换前,需要先完成一张以某字符替换某字符的对应关系转换表,使用string模块里面的maketrans函数(在3.6中,maketrans成为内建函数)。转换表是包含替换ASCII字符集中256个字符的替换字母的字符串。
maketrans函数:接受两个参数,即两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
>>> str=’ABCDEF’
>>> table=str.maketrans(‘AC’,’ac’)
>>> str.translate(table)
‘aBcDEF’
translate的第二个参数是可选的,用来指定需要删除的字符(在Python3.6中,这个参数已经去掉了)。