首页 > 其他学习 > python > python中的字符串常用操作
2017
09-15

python中的字符串常用操作

basestring是 str 和 unicode 的超类(父类),也是抽象类,因此不能被调用和实例化,但可以被用来判断一个对象是否为 str 或者 unicode 的实例,isinstance(obj, basestring) 等价于 isinstance(obj, (str, unicode))。

多个字符串用逗号英文的逗号(,)或者加号(+)连接,print()会依次打印每个字符串,遇到逗号(,)会输出一个空格,遇到加号不会输出空格。

字母大小写

capitalize:首字母大写

casefold:所有字母小写

lower:转换字符串中所有大写字符为小写

swapcase:翻转字符串中的大小写

title:返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串

upper:转换字符串中的所有小写字符为大写

填充对齐

center:center(width)将字符串居中,并使用空格填充至长度 width 的新字符串

ljust:ljust(width)返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串

rjust:rjust(width)返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串

zfill:zfill(width)返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充

删除字符串首尾字符

lstrip:lstrip([chars])去掉字符串左边的所有chars字符,省略默认删除空格

retrip:rstrip([chars])删除字符串末尾的所有chars字符,省略默认删除空格

strip:strip([chars])删除字符串前边和后边所有的chars字符,省略默认删除空格

字符串查找

count:count(sub[, start[, end]])返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选

find:find(sub[, start[, end]])检测sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选

index:index(sub[, start[, end]])跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常

rfind:rfind(sub[, start[, end]])类似于 find() 方法,不过是从右边开始查找

rindex:rindex(sub[, start[, end]])类似于 index() 方法,不过是从右边开始

endswith:endswith(sub[, start[, end]])检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选

startswith:startswith(prefix[, start[, end]])检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选

字符串替换

expandtabs:expandtabs([tabsize=8])把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8

replace:replace(old, new[, count])把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次

splitlines:splitlines(([keepends]))在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符

translate:translate(table)根据 table 的规则(可以由 str.maketrans('a', 'b') 定制)转换字符串中的字符

字符串分割

join:join(sub)以字符串作为分隔符,插入到 sub 中所有的字符之间,也就是说在sub字符串每个字符中间插入一次字符串

partition:partition(sub)找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 ('原字符串', '', '')

rpartition:rpartition(sub)类似于 partition() 方法,不过是从右边开始查找

split:split(sub=None, maxsplit=-1)字符串以sub字符串分割,不指定sub参数默认以空格作为分隔符,maxsplit 表示最大分隔次数,默认分割至字符串末尾,返回切片后的子字符串拼接的列表

rsplit:类似于 split() 方法,不过是从右边开始查找

字符串编码

encode:encode(encoding,[errors='strict'])以 encoding 指定的编码格式对字符串进行编码

判断语句

isalpha:如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

isnumeric:如果字符串中只包含数字字符,则返回 True,否则返回 False

isalnum:如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False,是isalpha和isnumeric和逻辑或

isascii:如果字符串中的所有字符都是ASCII,则返回True,否则返回False。

isdecimal:如果字符串只包含十进制数字则返回 True,否则返回 False

isdigit:如果字符串只包含数字则返回 True,否则返回 False

isidentifier:如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False

isspace:如果字符串中只包含空格,则返回 True,否则返回 False

istitle:如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False

islower:如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False

isupper:如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False

isprintable:如果字符串是可打印的,则返回True,否则返回False

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。

len()函数计算的是str的字符数。

hash(object):获取一个对象的哈希值。

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes,bytes的每个字符都只占用一个字节。

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')

b'ABC'

>>> '中文'.encode('utf-8')

b'\xe4\xb8\xad\xe6\x96\x87'

纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。在bytes中,无法显示为ASCII字符的字节,用\x##显示。

str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8。Python当然也支持其他编码方式,比如把Unicode编码成GB2312:

>>> '中文'.encode('gb2312')

b'\xd6\xd0\xce\xc4'

但这种方式纯属自找麻烦,如果没有特殊业务要求,为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

'中文'

输出格式化的字符串

在Python中,有两种方法可以格式化字符串,一种比较旧的就是采用的和C语言是一致的方法,用%实现,另一种比较强大的方法为使用字符串的format()函数

用%实现举例如下:

>>> 'Hello, %s' % 'world'

'Hello, world'

>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'

%运算符就是用来格式化字符串的。在字符串内部,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符有:

%c:格式化字符及其 ASCII 码
%s:格式化字符串
%d:格式化整数
%o:格式化无符号八进制数
%x:格式化无符号十六进制数
%X:格式化无符号十六进制数(大写)
%f:格式化浮点数字,可指定小数点后的精度
%e:用科学计数法格式化浮点数
%E:作用同 %e,用科学计数法格式化浮点数
%g:根据值的大小决定使用 %f 或 %e
%G:作用同 %g,根据值的大小决定使用 %f 或者 %E

格式化格式:%[(name)][flags][width].[precision]typecode
(name) 为命名
flags 可以有 +,-,' '(空格)、 0或#。+表示显示正负数符号(正数显示+)。- 表示左对齐,默认右对齐。' '表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充左侧,#表示显示八进制数前面显示零('0o'),显示十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')。
width表示显示宽度(整数位数+小数点1位+小数点后位数)
precision 表示小数点后精度

其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

'%2d-%02d' % (3, 1)结果:' 3-01'(3前面默认用空格填充)

>>> '%.2f' % 3.1415926结果:'3.14'

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。