python中的字符串常用操作
basestring是 str 和 unicode 的超类(父类),也是抽象类,因此不能被调用和实例化,但可以被用来判断一个对象是否为 str 或者 unicode 的实例,isinstance(obj, basestring) 等价于 isinstance(obj, (str, unicode))。
多个字符串用加号(+)连接
print(*objects, sep=' ', end='', file=sys.stdout, flush=False)
1. 用于对象打印输出
2. 命名参数sep指定多个输出对象的分隔符(默认空格' ')
3. 命名参数end确定输出结果的结尾(默认'')
4. 命名参数file确定往哪里输出(默认sys.stdout)
5. 命名参数fiush确定输出是否使用缓存(默认False)
sep、end、file、flush都必须以命名参数方式传参,否则将被当做需要输出对象
sep和end参数必须是字符串或None,为None时使用其默认值
不给print传递任何参数,将只输出end参数的默认值
file参数必须是一个含有write(string)方法的对象
字母大小写
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 符号( )转换为空格,如不指定参数,默认的空格数是 tabsize=8
replace:replace(old, new[, count])把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次
splitlines:splitlines(([keepends]))在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符
translate:translate(str, del="")根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
字符串分割
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'])以指定编码格式把字符串编码为bytes,如果出错默认报一个 ValueError异常,除非errors指定的是 'ignore' 或者'replace'
decode:decode(encoding,[errors='strict'])以指定编码格式解码
判断语句
isalpha:如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
isnumeric:如果字符串中只包含数字字符,则返回 True,否则返回 False
isalnum:如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False,是isalpha和isnumeric和逻辑或
isdecimal:是否只包含十进制数字
isdigit:是否只包含数字
Unicode数字 byte数字(单字节) 全角数字(双字节) 罗马数字 汉字数字
isnumeric True Error True True True
isdecimal True Error True False False
isdigit True True True True False
isascii:所有字符是都都是ASCII
isidentifier:字符串是否为一个合法变量
isspace:是否只包含空格
istitle:字符串是否是标题化(所有的单词都是以大写开始,其余字母均小写)
islower:如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False
isupper:如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False
isprintable:如果字符串是可打印的,则返回True,否则返回False
对于单个字符的编码:
chr(x) :将一个ascii码整数转换为一个字符,支持10进制和16进制(数字以0x前缀表示)。
unichr(x) :将一个ascii码整数转换为一个Unicode字符,支持10进制和16进制(数字以0x前缀表示)。
ord() :是 chr() 或unichr() 的配对函数,返回长度为1的字符串对应的 ASCII 数值或者 Unicode 数值,如果给定的 Unicode 字符超出了 Python 定义范围,则会引发一个 TypeError 的异常。
eval(str) :把字符串当作代码运行,并返回运行结果。
exec(str):和eval()作用相同,相比于eval,exec可以执行更复杂的 Python 代码。
len()函数计算的是str的字符数。
hash(object):获取一个对象的哈希值。
由于Python的字符串类型在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,需要把str变为以字节为单位的bytes,bytes的每个字符都只占用一个字节
Python对bytes类型的数据用带b前缀的单引号或双引号表示:b'中文'
以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'中文'
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes
在bytes中,无法显示为ASCII字符的字节,用x##显示。
str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8。Python也支持其他编码方式,如GB2312
>>> '中文'.encode('gb2312')
b'����'
但这种方式纯属自找麻烦,如果没有特殊业务要求,为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes,要把bytes变为str,就需要用decode()方法:
>>> b'中文'.decode('utf-8')
'中文'
输出格式化的字符串
在Python中,有三种方法可以格式化字符串:
一种是采用和C语言一致的方法,用%实现
一种是使用字符串的format()函数
还有一种是使用f-string方法
用%实现举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
%运算符就是用来格式化字符串的。在字符串内部,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
常见的占位符有:
%c:传入一个int整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111;传入一个字符:将字符添加到指定位置
%s:传入对象的__str__方法的返回值
%r:传入对象的__repr__方法的返回值
%d:将整数、浮点数转换成十进制表示
%o:无符号八进制数
%x:无符号十六进制数
%X:无符号十六进制数(大写)
%f:将整数、浮点数转换成浮点数表示,可指定小数点后的精度(默认小数点后保留6位)
%e:用科学计数法格式化浮点数
%E:作用同 %e,用科学计数法格式化浮点数
%g:自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位数用科学计数法)
%G:作用同 %g,根据值的大小决定使用 %f 或者 %E
格式化格式:%(name)[width].[precision]typecode(name) 为命名
flags 可以有 +,-,' '(空格)、 0或#。+表示显示正负数符号(正数显示+)。- 表示左对齐,默认右对齐。' '表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充左侧,#表示显示八进制数前面显示零('0o'),显示十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
width表示显示宽度(整数位数+小数点1位+小数点后位数)
precision 表示小数点后精度
'%2d-%02d' % (3, 1) // ' 3-01'(3前面默认用空格填充)
'%.2f' % 3.1415926 // '3.14'
python中的内置string模块中的常量:
string.ascii_lowercase:小写字母字符串('abcdefghijklmnopqrstuvwxyz')
string.ascii_uppercase:大写字母字符串(ABCDEFGHIJKLMNOPQRSTUVWXYZ')
string.ascii_letters:小写字母字符串和大写字母字符串拼接的字符串
string.digits:数字字符串('0123456789')
string.hexdigits:十六进制字符串('0123456789abcdefABCDEF')
string.octdigits:八进制字符串('01234567')
string.punctuation:被视为标点符号的ASCII字符组成的字符串('!"#$%&'()*+,-./:;<=>?@[]^_`{|}~.')
string.whitespace:空白符号的ASCII字符组成的字符串。包括空格、制表、换行、回车、进纸和纵向制表符
string.printable:可打印符号的ASCII字符组成的字符串。是digits,ascii_letters,punctuation和whitespace 的总和