目录
字符串的分类
普通字符串
原始字符串
字节字符串
字符串的基本操作
通用的操作
通用操作
字符串特点
python中的转义字符
字符串运算
字符串格式化
字符串格式化符号
字符串格式化字典
字符串格式化元组
注意事项
简单转换
字段宽度
精度
字符串方法
字符串基本方法
字符串方法作用分类
字符串连接
字符串搜索
字符串的替换
字符串分割
大小写互换
字符串对齐
字符串的测试
字符串的映射
字符串的编解码
类型判断 isinstance()
ASCII码的转换
字符串出现次数统计函数
字符串按操作方法分类
增
删
改
查
字符串测试
>>> s='abs\ndf'
>>> s
'abs\ndf'
>>> print(s)
abs
df
>>> type(s)
所有的字符都是直接按照字面意思来使用的,没有转义特殊或不能打印的字符。
原始字符串除在字符串的第一个引号前加上字面“r”(不区分大小写)以外,与普通字符串有着几乎完全相同的语法
>>> s=r'abs\ndf'
>>> print(s)
abs\ndf
>>> type(s)
只需要在定义字符串时转换成字节字符串
>>> s='abs\ndf'.encode("utf-8")
>>> print(s)
b'abs\ndf'
>>> type(s)
字符串是不可变的,所以字符串做不了切片赋值
>>> filed="just do it"
>>> filed[-3:]
' it'
>>> filed[-3:]=my
Traceback (most recent call last):
File "
NameError: name 'my' is not defined
语句中输出两行
>>> print('精诚所至\n金石为开')
精诚所至
金石为开
转义字符 |
描述 |
转义字符 |
描述 |
\(在行尾) |
续行符 |
\n |
换行 |
\\ |
反斜杠符号 |
\v |
纵向制表符 |
\' |
单引号 |
\t |
横向制表符 |
\" |
双引号 |
\r |
回车 |
\a |
响铃 |
\f |
换页 |
\b |
退格 |
\oyy |
0表示8进制数,yy表示字符 |
\e |
转义 |
\xyy |
x表示16进制数,yy表示字符 |
\000 |
为空 |
\o'ther |
其他字符以普通各式输出 |
操作符 |
描述 |
例(s1='abc')(s2='123') |
+ |
字符串连接 |
>>> s1+s2 'abc123' |
* |
重复输出字符串 |
>>> s1*2 'abcabc' |
[] |
通过索引获取字符串中的字符 |
>>> s1[2] 'c' |
[:] |
截取字符串中的一部分 |
>>> s1[0:2] 'ab' |
in |
成员运算符;若字符串中包含指定的字符串则返回True |
>>> 'a' in s1 True |
not in |
成员运算符;若字符串中不包含指定的字符串则返回True |
>>> 'f' not in s1 True |
r/R |
原始字符串 |
>>> s=r"ac\nm" >>> print(s) ac\nm |
% |
格式化字符串 |
基本用法是讲一个值插入到一个有字符串格式符%s的字符串中
字符串格式化符号(操作符%)
>>> print('hello,%s'%'world')
hello,world
>>> print('小明今年%s岁了'%10)
小明今年10岁了
格式化字符串的%s部分成为转换说明符,标记了需要 放置转换的位置,也名占位符
s表示百分号右边的值会被转换为字符串
符号 |
描述 |
符号 |
描述 |
%c |
格式化字符及其ACSII码 |
%f |
格式化浮点数字,可以指定精度值(默认输出6位小数) |
%s |
格式化字符串 |
%e |
用科学记数法格式化浮点数 |
%d |
格式化整数 |
%E |
作用同%e,用科学记数法格式化浮点数 |
%u |
格式化无符号整数 |
%g |
%f和%e的简写 |
%o |
格式化无符号8进制数 |
%G |
%f和%E的简写 |
%x |
格式化无符号16进制数 |
%p |
用16进制数格式化变量的地址 |
%X |
格式化无符号16进制数 |
制定精度的格式为一个英文格式下的句点加上要希望保留的小数的位数
>>> s=Template('there are ${key1}${key2} Quotations Symbol
>>> print(s.substitute(key2="a",key1=2))
there are 2a Quotations Symbols
右操作数是元组
其中每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符
有多个占位符的字符串中
使用元组传入多个格式化值,若元组作为转换表达式的一部分存在,必须用括号括起来
例子
>>> print('我叫%s,我今年%d岁了,我是%s孩'%('婷',25,'女'))
我叫婷,我今年25岁了,我是女孩
只需要写出转换类型
字段宽度和精度
转换后的值所保留的最小字符个数
数字转换结果中应该包含的小数位数或字符串转换后的值所能包含的最大字符个数
例
>>> print('pi的值为%10f'%3.141593)#字段宽度为10
pi的值为 3.141593
>>> print('pi的值为%10.2f'%3.141593)#字段宽度为10,保留2位小数
pi的值为 3.14
>>> print('pi的值为%.2f'%3.141593)#输出没有字段宽度参数
pi的值为3.14
>>> print('字符串精度获取:%.5s'%("hello world"))
字符串精度获取:hello
可使用*作为字段宽度和精度,数值从元组中读出
>>> print('从元组中获取字符串的精度:%*.*s'%(10,5,"hello world"))
从元组中获取字符串的精度: hello
符号、对齐和0填充
在字段宽度和精度之前可放置一个“标表”,可以是零、加号、减号、空格
>>> print('pi的值为:%010.2f'%3.141593)
pi的值为:0000003.14
若宽度前面的0更改为其他数字会认作宽度值,而不是填充值。
>>> print('pi的值为:%20.2f'%3.141593)
pi的值为: 3.14
在精度前面加0对精度没有任何影响
>>> print('pi的值为:%010.02f'%3.141593)
pi的值为:0000003.14
在精度前面加大于0的数字,则作为小数的实际位数输出
>>> print('pi的值为:%010.12f'%3.141593)
pi的值为:3.141593000000
在精度前面加小于0的数字,则报异常
>>> print('pi的值为:%010.-12f'%3.141593)
Traceback (most recent call last):
File "
ValueError: unsupported format character '-' (0x2d) at index 11
零用来左对齐数值
>>> print('pi的值为:%10.2f'%3.141593)
pi的值为: 3.14
>>> print('pi的值为:%-10.2f'%3.141593)
pi的值为:3.14
空白(“ ”)在正数前面加上空格
>>> print(('%5d'% 10)+'\n'+('%5d'%-10))
10
-10
+表示无论正数还是负数均表现出符号
>>> print(('宽度前加加号:%+5d'%10)+'\n'+('宽度前面加加号:%+5d'%-10))
宽度前加加号: +10
宽度前面加加号: -10
将序列中的元素以指定字符连接成新的字符串
str.join(sequence)
sequence代表要连接的元素序列
返回结果为指定字符串连接序列中元素后生成的新字符串
>>> f=[1,2,3,4]
>>> m='-'
>>> m.join(f)
Traceback (most recent call last):
File "
TypeError: sequence item 0: expected str instance, int found
列表中的元素不是字符串
>>> f.join(m)
Traceback (most recent call last):
File "
AttributeError: 'list' object has no attribute 'join'
检索目标不是字符串
>>> f=['1','2','3','4']
>>> m.join(f)
'1-2-3-4'
>>> f.join(m)
Traceback (most recent call last):
File "
AttributeError: 'list' object has no attribute 'join'
列表没有join方法
进行join操作调用和被调用的对象必须都是字符串,任意一个不是字符串都会报错
用于检测字符串是否包含子字符串str;若指定beg和end范围,就检查是否包含在 指定 范围内,若包含子字符串,就返回开始的索引值,否则返回-1
str.find(substr,beg=0,end=len(string))
str代表指定的字符串
substr代表指定的子字符串
beg表示开始索引,默认为0
end表示结束索引,默认为字符串的长度
返回结果为字符串所在未知的最左端索引,若没有,则返回-1
>>> a="let us go"
>>> a.find('let')
0
>>> a.find('go')
7
>>> a.find('ou')
-1
>>> a.find('go',5)
7
>>> a.find('go',8)
-1
>>> a.find('go',2,4)
-1
>>> a.find('go',0,8)
-1
>>> a.find('go',0,9)
7
可在指定字符串范围内查找子字符串出现的位置
str.rfing(substr,beg=0,end=len(string))
str代表指定的字符串
substr代表指定的子字符串
beg表示开始索引,默认为0
end表示结束索引,默认为字符串的长度
返回结果为最后出现的子字符串的第一个字母的标号,若字符串中没有字符串则返回-1,也 就是说从右边算起的第一次出现的substr的首字母标号
>>> print(s.rfind('cd',1,8))
2
>>> print(s.rfind('cd',1))
2
>>> print(s.rfind('cd',1,3))
-1
在指定字符串范围内查找字符串出现的位置,找不到则返回错误
str.indec(substr,beg=0,end=len(string))
str代表指定的字符串
substr代表指定的子字符串
beg表示开始索引,默认为0
end表示结束索引,默认为字符串的长度
返回结果为字符串所在未知的最左端索引,若没有,则返回错误
>>> s='abcd123'
>>> print(s.index('cd',1))
2
>>> print(s.index('cd',1,3))
Traceback (most recent call last):
File "
ValueError: substring not found
>>> print(s.index('cd',1,5))
2
>>> print(s.index('cd',1,8))
2
>>> print(s.index(1,8))
Traceback (most recent call last):
File "
TypeError: must be str, not int
可在右侧指定字符串范围内查找字符串出现的位置,找不到则报错
str.rindex(substr,beg=0,end=len(string))
str代表指定的字符串
substr代表指定的子字符串
beg表示开始索引,默认为0
end表示结束索引,默认为字符串的长度
返回结果为字符串所在未知的最左端索引,若没有,则返回错误
>>> print(s.rindex('cd',1))
2
>>> print(s.rindex('cd',1,8))
2
>>> print(s.rindex('cd',1,3))
Traceback (most recent call last):
File "
ValueError: substring not found
把字符串中的old(老字符串)替换成new(新的字符串),若指定第三个参数max,替换次 数不能超过max次
str.replace(old,new[,max])
str代表指定检索的字符串
old代表将被替换的子字符串
new代表新字符串,用于替换old子字符串
max代表可选字符串,替换次数不超过max次
>>> s="abcaadaeaghia"
>>> s.replace("a","v")
'vbcvvdvevghiv'
>>> s="abcaadaeaghia"
>>> s.replace("a","v",2)
'vbcvadaeaghia'
>>> s="abcaadaeaghia"
>>> s.replace("a","v",3)
'vbcvvdaeaghia'
>>> s="just do it , do it now"
>>> s.replace("do","just do")
'just just do it , just do it now'
>>> s.replace("o","just")
'just djust it , djust it njustw'
>>> s.replace("o","just",1)
'just djust it , do it now'
将tab替换为指定的空格数量
str.expandtabs([tablesize])
str代表指定的字符串
tablesi代表将tab替换的空格数量
>>> s='q 2 3 4 b'
>>> print(s.expandtabs(1))
q 2 3 4 b
>>> print(s.expandtabs(2))
q 2 3 4 b
>>> print(s.expandtabs(4))
q 2 3 4 b
str.translate(table[,deletechars])
str代表指定检索的字符串
table代表翻译表,翻译表通过maketrans方法转换而来
deletechars代表字符串中要过滤的字符列表
返回结果为翻译后的字符串
>>> intable="abcdefgiow"
>>> outable="1234567890"
>>> table=str.maketrans(intable,outable)
>>> s="just do it now"
>>> s.translate(table)
'just 49 8t n90'
translate方法只处理单个字符
通过指定分隔符对字符进行切片
str.split(st="",num=string.count(str))
str代表指定检索的字符串
st代表分隔符,默认为空格
num代表分割次数,若参数num有指定值,就分割num个字符串
返回结果为分割后的字符串列表
>>> s="do it now"
>>> s.split()
['do', 'it', 'now']
>>> s.split("t")
['do i', ' now']
>>> s.split("o",1)
['d', ' it now']
>>> s.split("o",2)
['d', ' it n', 'w']
>>> s.split("o")
['d', ' it n', 'w']
按照分割符分割字符串
str.splitlines([keepends])
str代表指定检索的字符串
keepends是一个bool值,若为真,则每行后面会保留行分隔符
>>> print (s.splitlines(True))
['1\n', '2\n']
>>> print (s.splitlines(False))
['1', '2']
用于移除字符串头尾指定的字符,默认为空格,不改变原字符串
str.strip([chars])
str代表指定的检索字符串
chars代表移除字符串头尾指定的字符
不带参数的strip()函数,表示把字符串中前后所有的空白字符去掉,包含\n、 \t、\r、、' '等不可见字符
带参数的strip()函数表示把字符串前后指定的chars去掉
返回结果为移除字符串头尾指定的字符后生成的新的字符串
>>> s=" just do it "
>>> s.strip()
'just do it'
>>> s="--just do it--"
>>> s.strip("-")
'just do it'
>>> s="--just-- do-- it--"
>>> s.strip("-")
'just-- do-- it'
strip只去除字符串头尾匹配的字符,中间的不会去除
将字符串的左边空格\t等空白内容去除
str.lstrip([chars])
str代表指定的检索字符串
chars代表移除字符串左边开头指定的字符
不带参数的lstrip()函数,表示把字符串中开头所有的空白字符去掉,包含\n、\t、\r、、' '等不可见字符
带参数的lstrip()函数表示把字符串左边开头最后指定的chars去掉
返回结果为移除字符串尾指定的字符后生成的新的字符串
>>> s="*just do it*"
>>> s.lstrip("*")
'just do it*'
将字符串的右边空格\t等空白内容去除
str.rstrip([chars])
str代表指定的检索字符串
chars代表移除字符串右边结尾指定的字符
不带参数的rstrip()函数,表示把字符串中结尾所有的空白字符去掉,包含\n、\t、\r、、' '等不可见字符
带参数的lstrip()函数表示把字符串右边最后指定的chars去掉
返回结果为移除字符串尾指定的字符后生成的新的字符串
>>> s.rstrip("*")
'*just do it'
str.lower()、str.upper()、str.swapcase()、str.capitalize()、str.capwords()、str.title()
用于将字符串中所有大写转换为小写
str.lower()
str代表指定检索的字符串
该方法不需要参数
返回结果为字符串中所有大写字符转换为小写后生成的字符串
>>> s="JUST DO IT"
>>> s.lower()
'just do it'
>>> s.find("It")
-1
>>> s.lower().find("It")
-1
不区分大小写
>>> s.lower().find("It".lower())
8
lower只针对英文字符串有效
用于将字符串中的小写字母转换成大写字母
str.upper()
str代表指定检索的字符串
该方法不需要参数
返回结果为小写字母转换为大写字母的字符串
>>> s="just do it"
>>> s.upper()
'JUST DO IT'
>>> s.find("It")
-1
>>> s.upper().find("It")
-1
不区分大小写
>>> s.upper().find("It".upper())
8
upper只针对英文字符串有效
用于对字符串的大小写字母进行转换,大写转换为小写,小写转换为大写
str.swapcase()
str代表指定检索的字符串
该方法不需要参数
返回结果为大小写字母转换后生成的字符串
>>> s.swapcase()
'JUST dO iT'
将字符串的首个字母转换为大写
str.capitalize()
str指定检索的字符串
>>> s="just do it*"
>>> s.capitalize()
'Just do it*'
把字符串中的每个单词的首字母转换为大写
string.capwords(str)
string模块
str指定检索的字符串
>>> import string
>>> string.capwords(str)
'Just Do It'
这是模块中的方法,是先用split()函数把str分开,然后用capitalize()把首字母变成 大写,然后用join()合并到一起
将字符串的每个单词首字母大写
str.title()
str指定检索的字符串
>>> s="just do it"
>>> s.title()
'Just Do It'
输出width个字符,str左对齐,不足的部分用fillchar填充,默认为空格
str.ljust(width,[fillchar])
str代表指定检索的字符串
width表示str的宽度,输出的个数
fillchar表示指定的填充字符
>>> s='abcd123'
>>> print(s.ljust(10,'#'))
abcd123###
>>> print(s.ljust(10))
abcd123
>>> len(s.ljust(10))
10
若没有空余的位置,则没有填充字符
输出width个字符,str右对齐,不足的部分用fillchar填充,默认为空格
str.rjust(width,[fillchar])
str代表指定检索的字符串
width表示str的宽度,输出的个数
fillchar表示指定的填充字符
>>> print(s.rjust(10))
abcd123
>>> print(s.rjust(10,'#'))
###abcd123
若没有空余的位置,则没有填充字符
字符串中间对齐
str.center(width,[fillchar])
str代表指定检索的字符串
width表示str的宽度,输出的个数
fillchar表示指定的填充字符
>>> print(s.center(10,'#'))
#abcd123##
>>> print(s.center(10))
abcd123
把字符串变成width的长,并且右对齐,不足部分用0补足
str.zfill(width)
str代表指定检索的字符串
width表示str的宽度,输出的个数
>>> print(s.zfill(10))
000abcd123
判断字符串是否以某个字符串为开头
str.startswith(s)
str代表指定检索的字符串
s代表判断的字符串,是否以此为字符串为开头
>>> name="roadgloaryad"
>>> if name.startswith("road"):
... print("name的开头字符串为:",'road')
...
name的开头字符串为: road
判断字符串是否以某个字符串为结尾
str代表指定检索的字符串
s代表判断的字符串,是否以此为字符串为结尾
>>> name="roadgloaryad"
>>> if name.endswith("yad"):
... print("name的结尾字符串为:",'yad')
...
name的结尾字符串为: yad
判断字符串中是否有某个字符串
s in str
str代表指定检索的字符串
s代表判断的字符串,是否包含在str中
>>> name="roadgloaryad"
>>> if 'glo' in name:
... print("glo"+"包含在name中")
...
glo包含在name中
检测字符串是否只含有字母,
若字符串至少有一个字符并且所有的字符都是字母则返回True,否则返回False
str.isalpha()
无参
>>> name="roadgloaryad"
>>> name.isalpha()
True
>>> name="roadgloaryad....1w3"
>>> name.isalpha()
False
>>> name=""
>>> name.isalpha()
False
检测字符串是否只由字母和数字组成
若字符串中至少有一个字符,切所有字符均由字母和数字组成,则返回True,否则返回Flase
str.isalnum()
无参
>>> name="roadgloarya781w3"
>>> name.isalnum()
True
>>> name="roadgloarya781w././3"
>>> name.isalnum()
False
>>> name="roadgloarya"
>>> name.isalnum()
True
>>> name="12345"
>>> name.isalnum()
True
检测字符串中的字符是否都是数字组成
若字符串中至少有一个字符,切所有字符均由数字组成,则返回True,否则返回Flase
str.isdigit()
无参
>>> name="12345"
>>> name.isdigit()
True
>>> name="roadgloarya"
>>> name.isdigit()
False
>>> name="12345dgfgdads"
>>> name.isdigit()
False
检测字符串是否只由空格组成
若字符串中至少有一个字符,切所有字符均由空格组成,则返回True,否则返回Flase
str.isspace()
无参
>>> name="roadgloarya"
>>> name.isspace()
False
>>> name="12345"
>>> name.isspace()
False
>>> name=" "
>>> name.isspace()
True
检测字符串中所有字符均由小写字母组成
若字符串中至少有一个字符,切所有字符均由小写字母组成,则返回True,否则返回Flase
str.islower()
无参
>>> name="avbff"
>>> name.islower()
True
>>> name="avbffFFF"
>>> name.islower()
False
检测字符串中所有字符是否均由大写字母组成
若字符串中至少有一个字符,切所有字符均由大写字母组成,则返回True,否则返回Flase
str.isupper()
无参
>>> name="ASDFD"
>>> name.isupper()
True
>>> name="avbffFFF"
>>> name.isupper()
False
检测字符串中所有单词拼写首字母是否为大写,其他为小写
若字符串中所有的单词首字母拼写是大写,其他的字母为小写则返回True,否则返回Flase
str.istitle()
无参
>>> name="Just Do It Now"
>>> name.istitle()
True
>>> name="Just Do it Now"
>>> name.istitle()
False
用于创建字符映射的转换表,对于接受两个参数的最简单的调用形式,第一个参数时字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标
返回字符串转换后生成的新的字符串
str.maketrans(from,to)
str.maketrans(intab,outtab)
from、intab:字符串中要替代的字符组成的字符串
to、outtab:相应的映射字符的字符串
from string import maketrans # 必须调用 maketrans 函数。 intab = "aeiou" outtab = "12345" trantab = maketrans(intab, outtab) str = "this is string example....wow!!!"; print str.translate(trantab);
t=bytes.maketrans(b'abc',b'ABC')
print(b'abc123'.translate(t,b"123"))
两个字符串的长度必须相同,为一一对应的关系
编码
str.encode([encoding,[errors]])
str指定检索的字符串
encoding编码方式
errors默认值为“strict”,意思为UnicodeError。还可以为ignore、replace、xmlcharrefreplace、backslashreplace和所有通过codecs.register_error注册的值
>>> s="this is string example........ok?"
>>> s=s.encode('utf-8','strict')
>>> print("Encoded String:",s)
Encoded String: b'this is string example........ok?'
>>> print("Decoded String:",s.decode('utf-8','strict'))
Decoded String: this is string example........ok?
解码
str.decode([decoding,[errors]])
str指定检索的字符串
decoding解码方式
errors默认值为“strict”,意思为UnicodeError。还可以为ignore、replace、xmlcharrefreplace、backslashreplace和所有通过codecs.register_error注册的值
>>> s="this is string example........ok?"
>>> s=s.encode('utf-8','strict')
>>> print("Encoded String:",s)
Encoded String: b'this is string example........ok?'
>>> print("Decoded String:",s.decode('utf-8','strict'))
Decoded String: this is string example........ok?
base64是网络上常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的方法
>>> import base64
>>> encodestr=base64.b64encode(b'just do it')
>>> print(encodestr)
b'anVzdCBkbyBpdA=='
>>> print(base64.b64decode(encodestr))
b'just do it'
该方法表示判断对象object是否是class-or-type-or-tuple的实例或者是子类
class-or-type-or-tuple表示可以是class类型,type类型,也可以是很多类型组成的tuple
>>> s2=b"just do it"
>>> print(isinstance(s2,bytes))
True
>>> list1=[1,2,3]
>>> print(isinstance(list1,list))
True
>>> num=12
>>> print(isinstance(num,int))
True
>>> print(isinstance(num,float))
False
>>> print(isinstance(num,(float,int)))
True
>>> class A(object):
... pass
...
>>> print(isinstance(A,object))
True
字符转换为ASCII的值
>>> print(ord("a"))
97
>>> print(ord("z"))
122
>>> print(ord("A"))
65
>>> print(ord("Z"))
90
将ascii值转换为字符
>>> print(chr(180))
´
>>> print(chr(78))
N
>>> print(chr(2000))
ߐ
>>> print(chr(20000))
丠
用于在字符串范围内进行出现次数的统计
str.count(substr,[start,[end]])
str代表指定检索的字符串
substr代表统计次数的字符串
start统计次数开始的位置
end统计次数结束的位子
>>> s="i am a girl"
>>> print(s.count("a"))
2