python字符串
Strings
1.\符号转义
>>> 'this name is \'希望\'' "this name is '希望'"
“\”反斜杠符号,表示转义,用来转义特殊符号,如'单引,"双引,\反斜杠自己
>>> print('this is \\') this is \ >>> 'this is \\' 'this is \\' >>>
两种不同的输出可以看出,反斜杠是否真正转义,写程序需要用print函数,而不是直接输出。
>>> print('this is \name') this is ame >>> print('this is \zame') this is \zame
由此可见,\使一些字符转义发生别的用处,例如\n,\t等等。
2.字符串切片
>>> name='who are you' #声明str类型数据 >>> name[0] #输出索引位置为1的字符串 'w' >>> name[-1] #输出索引位值为-1的字符串 'u' >>> name[0:-1] #输出从0到-1的字符串,也可以用name[:]表示 'who are yo' >>> name[:-2] #输出索引为值为-2之前的字符串 'who are y' >>>
切片的方式是将索引指向字符串的每个字符的位置,第一个字符位置为0,一直到最后为n。最后一个字符为-1,向前为-2,-3。
②而当索引位置越界,超出最大范围,则发生错误异常
>>> name[42] Traceback (most recent call last): File "<pyshell#118>", line 1, in <module> name[42] IndexError: string index out of range >>> name[4:43] #表示从索引为4的位置到43的位置,因为存在索引4的字符,结尾索引超过最大索引,所以从4的位置查询到最后 'are you' >>>
没有索引位值为42的字符,所以会抛出异常,我们可以通过函数len()来的到字符串的长度
③要知道,字符串是不可变的
>>> name[2]='aaaa' Traceback (most recent call last): File "<pyshell#120>", line 1, in <module> name[2]='aaaa' TypeError: 'str' object does not support item assignment #对象不支持分配 >>>
3.文本序列类型
字符串是Uncode的不可变的序列,字符串文字可以以各种方式编写
>>> print( 'allows embedded "double" quotes') allows embedded "double" quotes >>> print("allows embedded 'single' quotes") allows embedded 'single' quotes >>> print('''Three single quotes'''"""Three double quotes""") Three single quotesThree double quotes >>>
三重引用的字符串可能会跨越多行 - 所有相关的空格将包含在字符串文字中
②字符串总以b或B作为字符串前缀来表示bytes类型,而不是str类型,它们只能包含ASCII字符; 数值为128或更大的字节必须用转义表示
字符串和字节字面值可以选择以字母'r'
或前缀'R'
; 这样的字符串称为原始字符串,并将反斜杠视为文字字符
>>> name=b'this is name' >>> type(name) #以b或B表位前缀,使用type(name)获得数据的类型 <class 'bytes'> >>> name=r'this is /name' #字符串前缀r,则所有可转义的字符都不在转义,而作为文字字符 >>> name 'this is /name' >>>
ord()函数将字符串以整数表示
chr()函数把编码转换为对应的字符
通过encode(编码格式)方法可以为字符串指定编码转换为bytes
使用decode(编码格式)方法可以就爱那个bytes转换成str
>>> name='a' >>> ord(name) 97 >>> chr(97) 'a' >>> 'a'.encode('utf-8') b'a' >>> '中华'.encode('utf-8') b'\xe4\xb8\xad\xe5\x8d\x8e' >>> b'\xe4\xb8\xad\xe5\x8d\x8e'.decode('utf-8') '中华' >>> b'\xe4\xb8\xad\xe5\x8d\x8e'.decode('ascii') Traceback (most recent call last): File "<pyshell#159>", line 1, in <module> b'\xe4\xb8\xad\xe5\x8d\x8e'.decode('ascii') UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) >>>
Unicode编码转化为“可变长编码”的UTF-8
编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
向“GB2312”,“GBK”,“UTF-8”,“UTF-16”,“ISO-8859-1”,“ASCII”等等编码的详情,参考维基百科或百度百科
str类型的函数
只显示部分方法,具体更多方法请查看官方文档
字符串调用函数,只是返回结果并没有为源数据赋值
1 capitalize() 将字符串的首字母大写 2 casefold() 将字符串所有字母小写 3 center(width) 将字符居中,并填充长度 4 ljust(width) 左对齐并填充长度 5 rjust(width) 右对齐并填充长度 6 count(sub[,start[,end]]) 返回字符串在某段位置出现的个数 7 startswith(sub[,start[,end]]) 检查字符串是否以sub子字符串开头x,后两个参数表示范围 8 endswitch(sub[,start[,end]]) 检查字符串是否以sub子字符串结尾,后两个参数表示范围 9 expandtabs([tabsize=8]) 将字符串中的\t转换成空格,如果不指定参数,默认为8 10 find(sub[,start[,end]]) 检测指定位置中是否存在子字符串,有返回第一位所在的下标,没有则返回-1, end位置的元素不包括 11 rfind(sub[,start[,end]]) 从指定位置中从右边开始查找第一个sub 的下标 12 index(sub[,start[,end]]) 作用与find相似,但是没找到则发生异常 13 rindex(sub[,start[,end]]) 从指定位置中从右边开始查找第一个nsub 的下标 14 isalnum() 如果字符串中至少有一个字符并且所有字符都是字母或数字则返回True 15 isalpha() 如果字符串只有字母且都是字母,则返回True 16 isdigit() 判断字符串只包含数字且都是数字,则返回True 17 islower() 如果字符串中至少包含一个字母,并且所有字母都是小写的,则返回True 18 isupper() 如果字符串至少包含一个字母,并且所有字母都是大写,则返回True 19 isspace() 如果字符串不为空并且只包含空格,则返回True 20 istitle() 如果字符串中所有单词首字母都是大写,其余都是小写,则返回True,如果要包含数字,只能将数字作为一个单词,并且不能混杂字母 22 title() 将字符串标题化,所有单词开头大写,其余小写 23 join(sub) 以 字符串 为分割符 ,将所有字符串插入到 sub中所有字符之间 24 lower() 将字符串中所有字母转换成小写并返回 25 upper() 将字符串中所有字母转换成大写并返回 26 swapcase() 将字符串所有大写变小写,小写变大写 27 strip([char]) 清除字符串前后所有空格,不包括中间,参数则表示清除左右所有char 28 lstrip() 清除字符串开头所有空格 29 rstrip() 清除末尾所有空格 30 partition(sub) 从左至右查找字符串中第一个存在的sub,不存在则将字符串作为元组的第一个元素,第二第三个元素为空字符串, 31 存在则,将sub作为第二个元素,sub左边的作为第一个元素,右边的作为第三个元素 并返回长度为3的元组 32 rpartition(sub) 从右至左查找字符串中第一个存在的sub。。。。。。 33 replace(old,new[,count]) 将字符串中所有old字符串,替换成new字符串,第三个参数表示要替换的个数 34 split(sub) 查找字符串中是否存在sub,不存在则将字符串完整的作为列表返回,存在,则通过sub将字符串切割成若干份,以列表形式返回,列表中不再包含sub字符串 36 zfill(width) 字符串右对齐,用0填充剩余长度
字符串运算符
1 + 字符串连接 2 * 重复输出字符串 3 [] 通过索引获取字符串中的字符 4 [:] 截取字符串中的部分 5 in 成员运算符-如果字符串中包含给定的字符返回True 6 not in 成员运算符-如果字符串中不包含给定的字符返回True 7 r/R 字符串前加r或R,将不会转义特殊字符,同普通字符串一样打印 8 % 格式字符串
示例
>>> print('abc'+'def') abcdef >>> print('abc'*5) abcabcabcabcabc >>> print('l' in 'less') True >>> print('l' not in 'less') False >>> print('你的名字是 %s' % '希望') 你的名字是 希望 >>>
字符串格式化符号
%c 格式化字符串及其ASCII码 "%c" % 97 返回:'a'
%d 格式化整数
%s 格式化字符串 "我叫 %s 今年 %d 岁!" % ('小明', 10)返回:我叫小明今年10岁
%o 格式化无符号八进制数 "%o" % 10 10的八进制数,返回:12
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)