前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3学习笔记 | 五、Python的类型与运算-字符串(下)

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

作者头像
TeamsSix
发布2019-09-24 14:47:03
4670
发布2019-09-24 14:47:03
举报

一、字符串方法

除表达式之外,字符串还提供了一系列的方法去实现更复杂的文本处理任务。方法是与特定的对象相关联在一起的函数。从技术角度来讲,它们附属于对象的属性,而这些属性不过是些调用函数罢了。在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() - 第一个字母大写,其余都变成小写字母。

代码语言:javascript
复制
>>> 'Dora EmON'.capitalize()
'Dora emon'

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

代码语言:javascript
复制
>>> 'Dora EmON'.title()
'Dora Emon'

S.upper() - 全改成大写

代码语言:javascript
复制
>>> 'Dora EmON'.upper()
'DORA EMON'

S.lower() - 全改成小写

代码语言:javascript
复制
>>> 'Dora EmON'.lower()
'dora emon'

S.swapcase() - 大小写转换

代码语言:javascript
复制
>>> 'Dora EmON'.swapcase()
'dORA eMon'

2、排版

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

代码语言:javascript
复制
>>> 'DoraEmon'.center(15)
'    DoraEmon   '
>>> 'DoraEmon'.center(15,'十')
'十十十十DoraEmon十十十'
>>> 'DoraEmon'.ljust(15)
'DoraEmon
>>> 'DoraEmon'.rjust(15,'十')
'十十十十十十十DoraEmon'

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

代码语言:javascript
复制
>>> 'Dora\tEmon'.expandtabs(8)
'Dora    Emon'
>>> 'Dora\tEmon'.expandtabs(16)
'Dora            Emon'

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

代码语言:javascript
复制
>>> 'DoraEmon'.zfill(15)
'0000000DoraEmon'

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

代码语言:javascript
复制
>>> ' 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]])- 以特定字符串开头/结尾的,返回真假。

代码语言:javascript
复制
>>> 'DoraEmon'.startswith('D')
True
>>> 'DoraEmon'.startswith('D',2,3)
False
>>> 'DoraEmon'.endswith('o',6,7)
True

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

代码语言:javascript
复制
>>> 'DoraEmon'.count('o')
2
>>> 'DoraEmon'.count('o',1,5)
1

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

代码语言:javascript
复制
>>> '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差不多,但没找到会返回错误。

代码语言:javascript
复制
>>> '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是只替换相应个数,默认全替换。

代码语言:javascript
复制
>>> '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() - 判断每个单词第一个字母是不是大写

代码语言:javascript
复制
>>> '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)的

代码语言:javascript
复制
>>> 'DoraEmon'.isdecimal()
False
>>> 'DoraEmon'.isnumeric()
False
>>> 'DoraEmon'.isidentifier()
True
>>> 'DoraEmon'.isprintable()
True

5、字符分割

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

代码语言:javascript
复制
>>> '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分隔

代码语言:javascript
复制
>>> 'D\no\rraEmo\r\nn'.splitlines()
['D', 'o', 'raEmo', 'n']

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

代码语言:javascript
复制
>>> '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-字符串格式化方法,后面会详细讲解

代码语言:javascript
复制
>>> '-'.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语言的差不多。

代码语言:javascript
复制
>>> '%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、例子

代码语言:javascript
复制
>>> "%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 使用属性或指针

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> "{:*^40}".format("start")
'*****************start******************'
>>> "{:*^40}".format("end")
'******************end*******************'

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

代码语言:javascript
复制
>>> print("{:=10}\n{:=+10}\n{:-^10}\n{:=+10}".format(10,3,'-',13))
        10
+        3
----------
+       13

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

代码语言:javascript
复制
>>> "{:+}".format(10)
'+10'
>>> "{:-}".format(10)
'10'
>>> "{:-}".format(-10)
'-10'
>>> "{}".format(10)
'10'
>>> "{:}".format(10)
'10'

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

代码语言:javascript
复制
>>> "{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。

代码语言:javascript
复制
>>> "{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,%是显示百分比。

代码语言:javascript
复制
>>> "{0:e},{0:F},{0:g},{0:n},{0:%}".format(1.1)
'1.100000e+00,1.100000,1.1,1.1,110.000000%'

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TeamsSix 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、字符串方法
  • 1、大小写
  • 2、排版
  • 3、查找
  • 4、格式判断
  • 5、字符分割
  • 6、其他
  • 二、字符串格式化表达式
  • 1、格式化代码(typecode)
  • 2、例子
  • 三、字符串格式化方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档