Python3学习笔记 | 五、Python的类型与运算-字符串(下)

一、字符串方法

除表达式之外,字符串还提供了一系列的方法去实现更复杂的文本处理任务。方法是与特定的对象相关联在一起的函数。从技术角度来讲,它们附属于对象的属性,而这些属性不过是些调用函数罢了。在Python中,表达式和内置函数可能在不同范围的类型有效,但方法通常特定于对象类型,例如,字符串方法仅适用于字符串对象。

属性读取: Object.attribute格式的表达式可以理解为“读取object对象的属性attribute值”

函数调用表达式: 具有函数(参数)格式的表达式意味着“调用函数代码,传递零或者更多用逗号隔开的参数对象,最后返回函数的返回值”。

这两者合并可以让我们调用一个对象方法。

有如下几种字符串方法: 大小写相关: • S.capitalize()/S.title()/S.upper()/S.lower()/S.swapcase() 排版相关: • S.center(width[, fill])/ S.ljust(width[, fill])/S.rjust(width[, fill])/ S.expandtabs(tabsize)/S.zfill(width) • S.strip([chars])/S.lstrip([chars])/S.rstrip([chars]) 查找相关: • S.startswith(prefix[, start[, end]])/S.endswith(suffix[ ,start[ ,end]])/ S.count(sub[, start[, end]]) • S.find(sub [, start[, end]])/S.rfind(sub[, start[, end]])/S.replace(old, new[, count]) • S.index(sub[, start[, end]])/S.rindex(sub[, start[, end]]) 格式判断: • S.isalpha()/S.isdigit()/S.isalnum()/S.islower/S.isupper()/S.isspace()/S.istitle() • S.isdecimal()/S.isnumeric()/S.isidentifier()/S.isprintable() - Python3.x 字符分隔: • S.split([sep[, maxsplit]])/S.rsplit([sep[, maxsplit]])/S.splitlines([keepends])/S.partition(sep)/S.rpartition(sep) 其他: • S.join(iterable) • S.maketrans(x[, y[, z]])/S.translate(map) - Python3.x • S.format()

1、大小写

S.capitalize() - 第一个字母大写,其余都变成小写字母。

>>> 'Dora EmON'.capitalize()
'Dora emon'

S.title() - 每一词的头字母大写,其余都变成小写字母。

>>> 'Dora EmON'.title()
'Dora Emon'

S.upper() - 全改成大写

>>> 'Dora EmON'.upper()
'DORA EMON'

S.lower() - 全改成小写

>>> 'Dora EmON'.lower()
'dora emon'

S.swapcase() - 大小写转换

>>> 'Dora EmON'.swapcase()
'dORA eMon'

2、排版

S.center(width[, fill])/ S.ljust(width[, fill])/S.rjust(width[, fill]) - 原来的字符扩到指定长度,再用fill来填充其余空处,默认空格。中间对齐/左对齐/右对齐。

>>> 'DoraEmon'.center(15)
'    DoraEmon   '
>>> 'DoraEmon'.center(15,'十')
'十十十十DoraEmon十十十'
>>> 'DoraEmon'.ljust(15)
'DoraEmon
>>> 'DoraEmon'.rjust(15,'十')
'十十十十十十十DoraEmon'

S.expandtabs(tabsize) - 更改tabs(在字符串里”\t”)转换为空格的数量,默认为8。

>>> 'Dora\tEmon'.expandtabs(8)
'Dora    Emon'
>>> 'Dora\tEmon'.expandtabs(16)
'Dora            Emon'

S.zfill(width) - 原来的字符串扩到指定长度,前面使用0来填充,数字计算的时候会用到。

>>> 'DoraEmon'.zfill(15)
'0000000DoraEmon'

S.strip([chars])/S.lstrip([chars])/S.rstrip([chars]) - 删除两遍/左边/右边的指定字符(默认为空格和换行符)。

>>> ' DoraEmon\n '.strip()
'DoraEmon'
>>> ' DoraEmon\n '.lstrip()
'DoraEmon\n '
>>> ' DoraEmon\n '.rstrip()
' DoraEmon'
>>> ' DoraEmon\n '.strip('Em')
' DoraEmon\n '

3、查找

在这里所有的start和start, end看成是是S[start:]和S[start:end]

S.startswith(prefix[, start[, end]])/S.endswith(suffix[ ,start[ ,end]])- 以特定字符串开头/结尾的,返回真假。

>>> 'DoraEmon'.startswith('D')
True
>>> 'DoraEmon'.startswith('D',2,3)
False
>>> 'DoraEmon'.endswith('o',6,7)
True

S.count(sub[, start[, end]])- 相应字符串在文本里的个数。

>>> 'DoraEmon'.count('o')
2
>>> 'DoraEmon'.count('o',1,5)
1

S.find(sub [, start[, end]])/S.rfind(sub[, start[, end]])- 查找第一个与sub匹配的字符串位置,没找到返回-1。

>>> 'DoraEmon'.find('D')
0
>>> 'DoraEmon'.find('E')
4
>>> 'DoraEmon'.find('E',3,5)
4
>>> 'DoraEmon'.find('Q')
-1

S.index(sub[, start[, end]])/S.rindex(sub[, start[, end]])- 与find差不多,但没找到会返回错误。

>>> 'DoraEmon'.index('D')
0
>>> 'DoraEmon'.index('E')
4
>>> 'DoraEmon'.index('E',3,5)
4
>>> 'DoraEmon'.index('Q')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: substring not found

S.replace(old, new[, count])- 查找old,替换成new,count是只替换相应个数,默认全替换。

>>> 'DoraEmon'.replace('o','Xiong',)
'DXiongraEmXiongn'
>>> 'DoraEmon'.replace('o','Xiong',1)
'DXiongraEmon'

4、格式判断

返回的值都是真或者假。 S.isalpha() - 判断是不是字母 S.isdigit() - 判断是否数字 S.isalnum() - 判断是否数字和字母 S.islower() - 判断是不是有字母而且是全小写 S.isupper() - 判断是不是有字母而且是全大写 S.isspace() - 判断是不是只有空格和换行符号 S.istitle() - 判断每个单词第一个字母是不是大写

>>> 'DoraEmon'.isalpha()
True
>>> 'DoraEmon'.isdigit()
False
>>> 'DoraEmon'.isalnum()
True
>>> 'DoraEmon'.islower()
False
>>> 'DoraEmon'.isupper()
False
>>> 'DoraEmon'.isspace()
False
>>> 'DoraEmon'.istitle()
False

下面的只有Python3.x开始支持 S.isdecimal() - 判断是不是数字 S.isnumeric() - 判断是不是数字 S.isidentifier() - 判断字符能否成为标识符 S.isprintable() - 判断字符是否全部是能打印(print)的

>>> 'DoraEmon'.isdecimal()
False
>>> 'DoraEmon'.isnumeric()
False
>>> 'DoraEmon'.isidentifier()
True
>>> 'DoraEmon'.isprintable()
True

5、字符分割

S.split([sep[, maxsplit]])/S.rsplit([sep[, maxsplit]])- 从左/右以sep(字符串)分隔,最多maxsplit次(默认无限)

>>> 'DoraEmon'.split('o')
['D', 'raEm', 'n']
>>> 'DoraEmon'.split('o',1)
['D', 'raEmon']
>>> 'DoraEmon'.rsplit('o',1)
['DoraEm', 'n']

S.splitlines([keepends])- 以\n或者\r或者\r\n分隔

>>> 'D\no\rraEmo\r\nn'.splitlines()
['D', 'o', 'raEmo', 'n']

S.partition(sep)/S.rpartition(sep)- 从左/右找第一个sep分隔,sep左边的,sep,sep右边的。

>>> 'DoraEmon'.partition('o')
('D', 'o', 'raEmon')
>>> 'DoraEmon'.rpartition('o')
('DoraEm', 'o', 'n')

6、其他

S.join(iterable) S.maketrans(x[, y[, z]])/S.translate(map)-创建对照表, 然后使用translate()函数, 调用对照表, 把字符串(string)中的字符, 进行相应的替换,这个在python2.x和python3.x完全不同。 S.format-字符串格式化方法,后面会详细讲解

>>> '-'.join('DoraEmon')
'D-o-r-a-E-m-o-n'
>>> 
>>> D='DoraEmon'
>>> X=D.maketrans('Dora','DaXo')
>>> D.translate(X)'DaXoEman'
>>> 
>>> 'DoraEmon{DA}'.format(DA=' And DaXiong')
'DoraEmon And DaXiong'

二、字符串格式化表达式

这个格式化表达式与C语言的差不多。

>>> '%d%s%s4'%(1,'2','Three')
'12Three4'

格式是字符串里有%[(name)][flag][width][.precision]typecode加一个%, 再加上相应个数的元组(后面会讲元组)

1、格式化代码(typecode)

s 字符串(或任何对象) r 与s一样,但输出方式是repr方式,而不是str c 字符 d 十进制(整数) i 整数 u 无号整数 o 八进制整数 x 十六进制整数 X 与x同样,A-F是大写 e 浮点指数 E 与e同样,E是大写 f 浮点数十进制 F 浮点数十进制 g 浮点e或f G 浮点E或F

2、例子

>>> "%s | %r | %c" %("This is string","This is repr","C")
"This is string | 'This is repr' | C"
>>> "%d | %i | %o | %x | %x"%(3,5,11,13,15)
'3 | 5 | 13 | d | f'
>>> "%e | %E | %f | %F | %g | %G" %(1.5E3,1.5e3,13.5,13.5,1.5E13,13.5e15)
'1.500000e+03 | 1.500000E+03 | 13.500000 | 13.500000 | 1.5e+13 | 1.35E+16'
>>> "%(string)-10s" %({'string':'1'})
'1
>>> "%(float)+10.2f" % ({'float':3.1})
'     +3.10'
>>> "%(float)-10.2f" % ({'float':3.1})
'3.10

三、字符串格式化方法

在Python字符串方法里有format方法,根据特定的格式在里面输入相应关键字。例: ‘What do you like, {0}, {1} or {2}’.format(“spam”, “eggs”, “ham”) 结果是’What do you like, spam, eggs, ham’ 也可以换顺序 : ‘What do you like, {2}, {1} or {0}’.format(“spam”, “eggs”, “ham”) 结果是’What do you like, ham, eggs, spam’ 也可以使用相应的名字 ‘What do you like, {ham}, {0} or {eggs}’.format(“spam”, eggs=”eggs”, ham=”ham”) 结果是’What do you like, ham, spam, eggs’ 具体格式为: {fieldname!conversionflag:formatspec} fieldname是位置信息或关键字,后面可以跟属性或指针 conversionflag是r或者s,分别对应repr和str formatspec是具体显示方式,可以替代前面所使用过的其他字符串方法

fieldtype 使用属性或指针

>>> import sys
>>> sys.platform
'win32'
>>> "{0.platform}".format(sys)
'win32'
>>> "{0[Dora]}".format({"Dora":"DoraEmon"})
'DoraEmon'
>>> dict1={"Dora":"DoraEmon"}  #关于字典,后面会讲到。
>>> dict1["Dora"]
'DoraEmon'

当使用字典的时候需要引号来扩,但使用字符串格式化方法的时候不能使用引号

formatspec = [[fill]align][sign][#][0][width][,][.precision][type],fill和align再加上后面的width相当于方法里的center,ljust,rjust

>>> "{:*^40}".format("start")
'*****************start******************'
>>> "{:*^40}".format("end")
'******************end*******************'

这里也是,fill必须是单个字符。 align有<左对齐,>右对齐,^中间显示,=,在数字里符号在最前,数字右对齐。

>>> print("{:=10}\n{:=+10}\n{:-^10}\n{:=+10}".format(10,3,'-',13))
        10
+        3
----------
+       13

sign的值是+,-和空格。当+的时候,即使是正数,也会显示符号,-是只有在负数时显示符号(默认值),空格时,会为正数前面留下符号位

>>> "{:+}".format(10)
'+10'
>>> "{:-}".format(10)
'10'
>>> "{:-}".format(-10)
'-10'
>>> "{}".format(10)
'10'
>>> "{:}".format(10)
'10'

只有在数字显示里,显示二进制数,八进制数,十六进制数的时候,需要显示前面的0b,0o,0x的时候使用。

>>> "{0:#8b},{0:#8o},{0:#8x}".format(10)
'  0b1010,    0o12,     0xa'
>>> "{:,}".format(10000000)
'10,000,000'
>>> "{:08.5}".format(13.5767)
'0013.577'

type跟之前使用%表示的相等。当字符时:使用s,默认就是s;当整数时:b,o,x和X是二进制、八进制、十六进制,c是数字按unicode转成字符,d是正常十进制,默认是d。也可以使用n来代替d。

>>> "{0:d},{0:b},{0:o},{0:x},{0:X}".format(10)
'10,1010,12,a,A'

浮点数时:e和E是指数,f和F是浮点数。g和G是同一的,也可以使用n来代替g,%是显示百分比。

>>> "{0:e},{0:F},{0:g},{0:n},{0:%}".format(1.1)
'1.100000e+00,1.100000,1.1,1.1,110.000000%'

原文发布于微信公众号 - TeamsSix(OldCat0111)

原文发表时间:2019-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券