字符串常见操作
转义,常见转义符为
R/r
In [31]: s ='c:\windows\nt'
In [32]:print(s)
c:\windows
t
加入转义符号
In [33]: s =R'c:\windows\nt'
In [34]:print(s)
c:\windows\nt
三引号的作用
In [35]: sql ="""
...: select * from xxx where name = 'tom'
...: """
In [36]:print(sql)
select *from xxx where name = 'tom'
join 字符串的拼接
In [39]: a ='abcd'
In [40]:'.'.join(a)
Out[40]:'a.b.c.d'
In [42]: ' #'.join(a)
Out[42]: 'a # b# c # d'
split 字符串分割转为元组
split 以某个为分界线,进行分割成若干个字符串
split 默认为从左向右分割
In [46]: s1
Out[46]:"I'm \ta super student"
In [47]:s1.split()
Out[47]:["I'm", 'a', 'super', 'student']
以super关键字进行切割
In [48]:s1.split('super')
Out[48]:["I'm \ta ", ' student']
以引号进行切割
In [6]:a.split("'")
Out[6]: ['I', 'mvery sorry']
以某个单词进行切割,可以发现sorry这个单词背
In [8]:a.split("sorry")
Out[8]:["I'm very ", '']
默认为遇空白字符进行分割
以关键字进行切分N段
以空格进行切割成某几个段,比如从第一个空格进行分段,那么第一个空格开始的为一段,剩余的段落为一个整段
In [18]: a = 'OnFriendship And a youth said'
In [19]:a.split(' ',1)
Out[19]: ['On','Friendship And a youth said']
以空格为准,分成两段,这样在分成第二个空格后面的整体又为一段
In [20]:a.split(' ',2)
Out[20]: ['On','Friendship', 'And a youth said']
rsplit 反向切分
一般用于取文件路径以及文件名效率比较高
取s1字符串中,以最后一个关键字为切割符,并将其最后分为1段(取反)
In [45]: s1
Out[45]:'/data0/python/projects'
In [46]:s1.rsplit('/',1)
Out[46]:['/data0/python', 'projects']
In [47]: s1 =r'/data0/python/projects/hello.txt'
In [48]:s1.rsplit('/',1)
Out[48]:['/data0/python/projects', 'hello.txt']
maxsplit 平均最大切分x段,与默认切段一样,都是以当前关键字依次向后切分
In [51]: a
Out[51]: 'OnFriendship And a youth said'
In [52]:a.split(' ',maxsplit=2)
Out[52]: ['On','Friendship', 'And a youth said']
aplitlines 按行切割
In [66]: a ="""
...: hello
...: python
...: enenhaha
...: """
In [67]: a
Out[67]:'\nhello\npython\nenenhaha\n'
In [68]:a.splitlines()
Out[68]: ['','hello', 'python', 'enenhaha']
splitlines会将回车和换行符(\n)都认为是一行
splitlines true
true 参数为保留特殊字符
In [87]: a
Out[87]: 'abc \nnde \r haha \n'
In [88]:a.splitlines()
Out[88]: ['abc', ' nde ', ' haha ']
In [89]:a.splitlines(True)
Out[89]: ['abc\n', ' nde \r', ' haha \n']
partition 以某个关键字为分割符 *
从左到右,将分隔字符切割成两部分
In [99]: a
Out[99]: 'NoPython documentation found for'
In [100]:a.partition('ython')
Out[100]: ('NoP', 'ython', ' documentation found for')
n [108]:len(a.partition('P'))
Out[108]: 3
In [101]:a.partition('Python')
Out[101]: ('No', 'Python', ' documentation found for')
n [108]:len(a.partition('P'))
Out[108]: 3
如果发现没有则将本身为head,并且将sep 和tail 全部被抹去
查看一个不存在的关键字:
n [102]:a.partition('HAHAHA')
Out[102]: ('NoPython documentation found for', '', '')
反向partition
rpartition
In [112]:a.rpartition('Python')
Out[112]: ('No', 'Python', ' documentation found for')
与正向不同的是,它只返回一个tail结尾
In [115]:a.partition('hahaha')
Out[115]: ('NoPython documentation found for', '', '')
In [116]:a.rpartition('hahaha')
Out[116]: ('','', 'No Python documentation found for')
这样用于筛取最后字段的话,更加方便
In [119]:a.partition('/')
Out[119]: ('','/', 'data0/python/projects/hello.txt')
In [120]:a.rpartition('/')
Out[120]:('/data0/python/projects', '/', 'hello.txt')
In [124]:a.rpartition('/')[-1]
Out[124]:'hello.txt'
字符大小写
upper() 全部转为大写
lower() 全部转为小写
In [139]: a.upper()
Out[139]: 'SUPERSTUDENT'
In [140]:a.upper().lower()
Out[140]: 'superstudent'
可以用于大小写判断时候用到
In [144]: b ='super'
In [145]: b in a
Out[145]: True
In [146]: b ina.upper()
Out[146]: False
swapcase() 互换大小写
In [151]:a.swapcase()
Out[151]: 'aBc'
In [152]: a
Out[152]: 'AbC'
字符串排版
首字母大写
In [153]: s1
Out[153]:"I'm \ta super student."
In [154]:s1.title()
Out[154]:"I'M \tA Super Student."
In [155]:s1.capitalize()
Out[155]:"I'm \ta super student."
字符填充
center 设置宽度
In [156]: s1 ='abc'
In [157]:s1.center(10)
Out[157]:' abc '
填充字符
In [158]: s1.center(10,'*')
Out[158]:'***abc****'
左右填充
zfill 、 just ,当位数不足以拟定的长度时,以字符0进行补齐
左填充
In [159]:s1.zfill(10)
Out[159]:'0000000abc'
右填充
In [162]: s1.ljust(10,'#')
Out[162]:'abc#######'
字符串修改 *
replace 替换,在字符中找到旧的字符将其替换为新的字符串,如果不指定count则全部替换
In [164]: a ='www.baidu.com'
In [165]:a.replace('w','p')
Out[165]:'ppp.baidu.com'
指定替换的次数
In [171]:a.replace('w','p',2)
Out[171]:'ppw.baidu.com'
In [172]: a ='www,www,www,www'
In [173]:a.replace('www','p',3)
Out[173]:'p,p,p,www'
字符都是以从左到右进行查找并替换,找到匹配的字符并且将其进行替换,如有连续的字符则当一次替换操作
In [175]:a.replace('w','python ',3)
Out[175]:'python python python ,www,www,www'
操作后为返回一个新的字符串,因为字符串本身是不可变的
strip 去掉空格 *
在字符串两端进行查找并去除指定的字符集
在输入的时候或者赋值的时候难免会出现一些空格或其他字符,如我们想过滤掉的话可以使用strip进行过滤
In [176]: enter= input('>>>')
>>> 23
In [177]: enter
Out[177]: ' 23'
去掉空格
In [179]:enter.strip()
Out[179]: '23'
strip主要将左右两边的多余空格进行过滤
In [180]: a ='en hahaha qie hoho '
In [181]:a.strip()
Out[181]: 'enhahaha qie hoho'
将关键字进行过滤,先去掉再去掉
先去掉r再去掉y,返回移除字符串头尾指定的字符生成的新字符串
In [182]: a = 'Iam very very very sorry'
In [186]:a.strip('r y')
Out[186]: 'I amvery very very so'
在其取值的时候将其打散逐步去进行裁剪
In [218]:s.strip('r y')
Out[218]: 'I amvery very very so'
In [236]:s.strip('r yve')
Out[236]: 'I amvery very very so'
In [237]:s.strip('r yso')
Out[237]: 'I amvery very ve'
In [238]:s.strip('r yso ')
Out[238]: 'I amvery very ve'
In [239]:s.strip('r yso')
Out[239]: 'I amvery very ve'
In [240]:s.strip('r yso er')
Out[240]: 'I amvery very v'
lstrip() 从左开始
In [264]:s.lstrip('I ysdfsdfam')
Out[264]: 'veryvery very sorry'
rstrip() 从右开始
In [270]:s.rstrip('I ysdfsdfam')
Out[270]: 'I amvery very very sorr'
字符串查找 *
rfind 从左到右
从-1开始查找
取当前第一个字符匹配的索引
In [294]:a.rfind('p',-1)
Out[294]: 11
返回值不能是负索引
index 与find几乎一致,找到返回的索引
In [320]:a.index('str')
Out[320]: 7
count 统计子串出现次数
统计某个特殊字符出现的次数
In [323]: a
Out[323]: 'object to str implicitly'
In [324]: a.count('o')
Out[324]: 2
统计某个范围字母出现的次数
In [326]: a.count('o',0,5)
Out[326]: 1
从某个索引位置开始统计次数
In [327]:a.count('o',5)
Out[327]: 1
时间复杂度
index和count方法都是O(n) 随着列表数据增大,而效率下降
len() 为O(1)
字符串判断 *
startwith 判断是否是以某个字母开头
In [333]:s.startswith('I am')
Out[333]: True
In [334]: s
Out[334]: 'I amvery very very sorry'
判断其步长开始的开头
In [337]: s
Out[337]: 'I amvery very very sorry'
In [338]:s.startswith('a',2)
Out[338]: True
判断长度范围内开头的字符
n [342]:s.startswith('a',2,100)
Out[342]: True
endwith() 判断结尾的字符
In [351]:s.endswith('y')
字符串判断is \ in
isidentifier 判断是否是字母和下划线开头,其他都是字母
In [361]: a
Out[361]: 'a5'
In [362]:a.isidentifier()
Out[362]: True
islower 判断全部小写
isupper 判断全部大写
isspace 判断是否包含空格
format 字符串格式化
In [363]: a ="{server} {1}:{0}".format(8888,'192.168.1.100',server="webinfo")
In [364]:print(a)
web info192.168.1.100:8888
以元组下标方法
In [367]: a ="{0[0]}.{0[1]} ".format(('mage','com'))
In [368]:print(a)
mage.com
习题略
zuzhou 51CTO博客,原文链接:http://blog.51cto.com/yijiu/1968172