字符串
在Python中字符串本身有带很多操作,字符串的特性,不可以被修改
1、字符串的定义,Traceback 回溯
1 2 3 4 5 6 7 8 9 10 11 12 |
#定义空字符串
name = ''
#定义非空字符串
>>> name = "zhangqigao"
#通过下标访问
>>> name[ 1 ]
'h'
#不能修改字符串的值,否则会报错
>>> name[ 2 ] = '3'
Traceback (most recent call last):
File "" , line 1 , in
TypeError: 'str' object does not support item assignment
|
注:字符串如果修改的话,字符串所在的内存地址也跟着变化,所以不可被修改,但是对于列表来说,可以修改是因为列表的内存是不变的,可以直接在上面修改
2、切片
字符串其实和列表,元组一样,也是可以切片的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> name = "qigao zhang"
>>> name[ 1 : 4 ] #取1到4之间的字符,包括1,不包括4
'iga'
>>> name[ 1 : - 1 ] #取1到-1之间的字符,包括1,不包括-1
'igao zhan'
>>> name[ 0 : 3 ]
'qig'
>>> name[: 3 ] #从头开始取,0可以省略,效果等同于name[0:3]
'qig'
>>> name[ 3 :] #想取到最后一个值,必须不能写-1,只能这么写
'ao zhang'
>>> name[ 0 :: 2 ] #后面的2表示:每隔一个字符就取一个
'qgozag'
>>> name[:: 2 ] #从头开始0可以省略,效果跟上一句一样
'qgozag'
|
3、首字母大写(capitalize())
1 2 3 |
>>> name = "qigao zhang"
>>> name.capitalize()
'Qigao zhang'
|
4、统计(count(sub,start=None,end=None))
sub:统计的字符,start:开始位,end:结束位,start和end默认为空时,则表示全部字符中去统计
1 2 3 4 5 6 7 |
>>> name = "qigao zhangz"
#有开始和结束符
>>> name.count( "z" , 1 , 5 )
0
#从整个字符串中统计字符
>>> name.count( "z" )
2
|
5、center(width,fillchar)
如果width(字符宽度)小于等于(<=)字符串的长度,则返回原字符串,如果大于(>)字符串的,则用fillchar(填满字符)填满,处理结果等于width,字符串位于fillchar的中间
1 2 3 4 5 6 7 8 9 10 11 |
>>> name = "qigao zhangz"
>>> len (name)
12
#10小于等于字符串宽度
>>> name.center( 10 , '-' )
'qigao zhangz'
#51大于字符串长度,并且字符串位于填充字符的中间
>>> name.center( 51 , '-' )
'--------------------qigao zhangz-------------------'
>>> len (name.center( 51 , '-' ))
51
|
6、ljust(width,fillchar) fill填满
如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最右边
1 2 3 4 5 6 7 8 9 10 11 |
>>> name = "qigao zhang"
>>> len (name)
11
#小于等于字符串的长度
>>> name.ljust( 11 , '-' )
'qigao zhang'
#大于字符串的长度
>>> name.ljust( 50 , '-' )
'qigao zhang---------------------------------------'
>>> len (name.ljust( 50 , '-' ))
50
|
注:ljust中的l表示left的意思,表示从右向左
7.rjust(width,fillchar)
如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最左边
1 2 3 4 5 6 7 8 9 |
>>> name = "qigao zhang"
>>> len (name)
11
>>> name.rjust( 11 , '-' )
'qigao zhang'
>>> name.rjust( 50 , '-' )
'---------------------------------------qigao zhang'
>>> len (name.rjust( 50 , '-' ))
50
|
注:ljust中的l表示left的意思,表示从左向右
8、编码(encode)
字符串的编码和解码,在这边不用说了,我专门写了一篇博客,详细地址:猛击这里
9、endwith(suffix,start=None,end=None)
判断是否已suffix结尾,是返回True,否返回Fales
suffix:表示字符,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断
1 2 3 4 5 6 7 |
>>> name = "qigao zhang"
#start和end不为空
>>> name.endswith( 'g' , 1 , 5 )
False
#默认为空
>>> name.endswith( 'g' )
True
|
10、find(sub,start=None,end=None)
全文查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1
sub:字符或者字符串,start:开始位,end:结束位,start和end默认为空时,则在整个字符串中查找
1 2 3 4 5 6 7 8 9 10 |
>>> name = "qigao zhang"
#没找到,则返回-1
>>> name.find( 'zh' , 1 , 5 )
- 1
>>> name.find( 'q' , 2 )
- 1
>>> name.find( 'zh' )
6
>>> name.find( 'zh' , 1 , 8 )
6
|
11、rfind(sub,start=None,end=None)
从左向右查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1
1 2 3 4 5 6 7 |
>>> name = "qigao zhang"
#找到
>>> name.rfind( 'q' )
0
#未找到
>>> name.rfind( 'q' , 2 )
- 1
|
12、format() (format 格式)
这个函数就不用多少了,这个小主也专门写了一篇博客,更多用法,请:猛击这里
13、format_map()
数据格式,以字典形式传入
1 2 3 4 |
>>> name = "name:{name},age:{age}"
>>> name.format_map({ 'name' : 'zhangqigao' , 'age' : 23 })
#输出结果
'name:zhangqigao,age:23'
|
14、isalnum()
是否是一个阿拉伯数字和字母,它包含因为英文字符+(1-9)数字,中间不能有特殊字符
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> age = '23'
>>> age.isalnum()
True
#有特殊字符的
>>> age = '2.3'
>>> age.isalnum()
False
>>> age = 'ab23'
>>> age.isalnum()
True
>>> age = 'ab'
>>> age.isalnum()
True
|
15、isalpha()
是否是一个纯的英文字符,包含大写
1 2 3 4 5 6 7 8 9 10 11 |
>>> age = 'ab'
>>> age.isalpha()
True
#夹着数字
>>> age = 'ab23'
>>> age.isalpha()
False
#大写
>>> age = 'Ab'
>>> age.isalpha()
True
|
16、isdigit() (digit数字)
判断是否是一个整数,详情请见:猛击这里
17、isspace()
判断是否是一个空格
1 2 3 4 5 6 7 8 |
#不是空格
>>> age = ' age'
>>> age.isspace()
False
#是空格
>>> age = ' '
>>> age.isspace()
True
|
18、istitle()
是否是一个标题(字符串中的每个单子首字母大写)
1 2 3 4 5 6 7 8 |
#每个单词的首字母是大写
>>> name = "Zhang Qi Gao"
>>> name.istitle()
True
#每个单词的首字母是小写
>>> name = "zhang qi gao"
>>> name.istitle()
False
|
19、isupper() (upper 上面的)
是否是大写,注意字符串必须全部是大写才会返回True,否则返回False
1 2 3 4 5 6 7 8 |
#全部大写
>>> name = "ZHANG"
>>> name.isupper()
True
#小写
>>> name = "Zhang"
>>> name.isupper()
False
|
20、join()
序列用某个字符拼接成一个字符串,注意的是,序列的元素必须是str类型
1 2 3 |
>>> a = [ '1' , '2' , '3' ]
>>> '+' .join(a)
'1+2+3'
|
21、lower()
字符串中的大写字母转换为小写字母
1 2 3 |
>>> name = "ZhangQiGao"
>>> name.lower()
'zhangqigao'
|
22、upper()
字符串中的小写字母转换为大写字母
1 2 3 |
>>> name = "ZhangQiGao"
>>> name.upper()
'ZHANGQIGAO'
|
23、strip() (strip 脱光,剥去)
去掉左右两边的空格(space)和回车(\n)
1 2 3 |
>>> name = " \n zhangqigao \n"
>>> name.strip()
'zhangqigao'
|
24、lstrip()
删掉左边到右的空格(space)和回车(\n)
1 2 3 |
>>> name = " \n zhangqigao \n"
>>> name.lstrip()
'zhangqigao \n'
|
25、rstrip()
删掉右边到左边的空格(space)和回车(\n)
1 2 3 |
>>> name = " \n zhangqigao \n"
>>> name.rstrip()
' \n zhangqigao'
|
至此,方法前有l(left)和r(right)的函数,都是对之前函数的一个扩展,带l的表示至始至终从右到左操作,记住左边才是最终目的地,而带r的至始至终都是从左到右,因为右边才是它的终极目标
26、split()
分割函数,默认是以空格分割(space)生成一个列表,如果其他字符分割,输入其他字符参数
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> name = "qigao zhang"
#默认为空,按空格分割
>>> name.split()
[ 'qigao' , 'zhang' ]
>>> name = "qigao+zhang"
#以'+'字符分割
>>> name.split( "+" )
[ 'qigao' , 'zhang' ]
#以'\n'分割
>>> name = "qigao\nzhang"
>>> name.split( "\n" )
[ 'qigao' , 'zhang' ]
|
27、splitlines()
以换行符分割,这个一般在windows上开发,移到Linux上执行,或者在Linux上开发,移到Windows上执行,因为换行在windows上是"\r\n",linux上是'\n'
1 2 3 |
>>> name = "qigao\nzhang"
>>> name.splitlines()
[ 'qigao' , 'zhang' ]
|
28、swapcase() (swapcase 交换盒)
把大写换成小写,把小写换成大写
1 2 3 |
>>> name = "ZHang"
>>> name.swapcase()
'zhANG'
|
29、startswith(prefix, start=None,end=None) (prefix 前缀)
判断是否已prefix结尾,是返回True,否返回Fales
prefix:表示字符或者字符或者字符串,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断
1 2 3 4 5 |
>>> name = "zhang qigao"
>>> name.startswith( "zhang" ) #开头找到"zhang" 字符串
True
>>> name.startswith( "h" , 3 , 5 ) #在索引3到5之间没有找到以字符'h'开头
False
|
30、replace(old,new[, max])
old:将被替换的子字符串; new:新字符串,用于替换old子字符串;max:可选字符串, 替换不超过 max 次
1 2 3 4 5 6 7 8 9 10 |
>>> name = "zhang is shuai ge"
>>> name.replace( 'is' , 'was' )
'zhang was shuai ge'
#原字符串没有改变
>>> name
'zhang is shuai ge'
>>> name.replace( 'is' , 'was' , 0 )
'zhang is shuai ge'
>>> name.replace( 'is' , 'was' , 1 )
'zhang was shuai ge'
|
31、zfill(width) (fill 填满,zero 零)
字符的长度是否大于等于(>=)with,如果比width小,则在字符串钱用0填充,如果>=width,则返回原字符串
1 2 3 4 5 6 7 8 9 |
>>> name = "zhangqigao"
>>> len (name)
10
#width大于字符串长度
>>> name.zfill( 11 )
'0zhangqigao'
#width小于等于字符串长度
>>> name.zfill( 10 )
'zhangqigao'
|