Python基础数据类型-字符串(string)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟,请知晓。
一.字符串的基本操作
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 name = " yinzhengjie " 8 9 print(name.capitalize()) #将首字母大写 10 print(name.count("e")) #统计"e"这个字母在name变量中的字符串出现的次数 11 print(name.center(50,"=")) #打印50个字符,如果name这个变量中的字符串总个数不足50个,少出来的位置用“=”来填补,将name这个变量居中。 12 print(name.ljust(50,"*")) #打印50个字符,如果name这个变量中的字符串总个数不足50个,少出来的位置用“=”来填补,但并不是将name这个字符串居中,而是打印整个字符串,不够50个字符串的用“*"号填补。 13 print(name.rjust(50,"*")) #这个和上面的相反,将整个字符串的占位打在右边,左边不足50个字符的用"*"填补. 14 print(name.endswith("jie")) #判断一个变量是否以“jie”这个字符串结尾,如果是就返回Ture. 15 print(name.find("e")) #在name这个字符串中查找含有name字样的索引,从左往右开始查找,将查找的第一个返回出来,也就是最靠左边的那个. 16 print(name.rfind("e")) #从左往右开始查找,将查找到的最靠右的匹配结果的索引取出来. 17 print(name[name.find("n"):]) #字符串和列表都有相同的功能,都可以支持切片,比如这个例子就是取“n”这个字符后面的所有字符. 18 print(name.isalnum()) #判断字符串是否仅仅包含[a-z][A-Z][0-9] 19 print(name.isalpha()) #判断字符串仅仅包含[a-z][A-Z] 20 print(name.isdecimal()) #判断字符串是否是十六进制的数字 21 print(name.isdigit()) #判断该字符串是否是一个整数 22 print(name.isidentifier()) #判断是不是一个合法的标识符 23 print(name.islower()) #判断前面的字符串是否都是小写 24 print(name.isupper()) #判断前面的字符串是否都是大写 25 print(name.isnumeric()) #判断该变量是否是一个十进制的数字 26 print(name.isspace()) #判断前面的字符串是否是一个空格 27 print(name.istitle()) #判断这个字符串的每个字母是否大写 28 print(name.isprintable()) #判断前面的字符串是否支持打印功能,一般字符串都是可以打印的。在linux中一切都是文件,一些tty,drive等终端文件是不能打印的,就可以用这个来判断,用途比较少 29 print(name.lower()) #将大写变成小写 30 print(name.upper()) #将小写变成大写 31 print(name.lstrip()) #只去掉左边的换行符或者空格 32 print(name.rstrip()) #只去掉左边和右边的换行符或者空格 33 print(name.strip()) #去掉字符串左右两边的空格和换行符. 34 35 36 37 #以上代码执行结果如下: 38 yinzhengjie 39 2 40 ============== yinzhengjie =============== 41 yinzhengjie ***************************** 42 ***************************** yinzhengjie 43 False 44 10 45 15 46 nzhengjie 47 False 48 False 49 False 50 False 51 False 52 True 53 False 54 False 55 False 56 False 57 True 58 yinzhengjie 59 YINZHENGJIE 60 yinzhengjie 61 yinzhengjie 62 yinzhengjie
二.字符串的格式化输出操作
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 ''' 9 字符串格式化:将数字和字符串相结合 10 11 ''' 12 13 #注意,%s和%d都是占位符哟! 14 msg = "我的名字是%s,年龄是%d,爱好是:%s"%("尹正杰",18,"Python") 15 16 print(msg) 17 18 name = "我的英文名字是:%s"% "yinzhengjie" 19 print(name) 20 21 22 23 #以上代码执行结果如下: 24 我的名字是尹正杰,年龄是18,爱好是:Python 25 我的英文名字是:yinzhengjie
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 UserInformation = "My name is {name} and I love play {hobby}!" 8 print(UserInformation) 9 print(UserInformation.expandtabs(tabsize=50)) #自定义tab的间隔打小,该处是指定tab的间隔是50个空格。 10 print(UserInformation.format(name="Yinzhengjie",hobby="Skating")) #以定义一个变量的形式传递一个参数到“UserInformation”的字符串中 11 print(UserInformation.format_map({'name':"Yinzhengjie",'hobby':"Skiing"})) 12 print('+'.join(['1','2','3'])) #将一个列表的信息追加到前面的字符串中。 13 14 15 16 17 #以上代码执行结果如下: 18 My name is {name} and I love play {hobby}! 19 My name is {name} and I love play {hobby}! 20 My name is Yinzhengjie and I love play Skating! 21 My name is Yinzhengjie and I love play Skiing! 22 1+2+3
三.字符串的进阶操作
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 passwd = str.maketrans("abclefghijklmnopqrstuvwxyz",'1234567890!@#$%^&*()_+-={}') #将前面的字符串后后面的数字和特殊字符一样匹配,对应的数字会转换成相应的字符。 8 9 print("yinzhengji111e".translate(passwd)) # 将上面自定义的参数,合这里面的字符想对应,如果穿进去的参数没有对应的字符就不匹配。这个跟Linux的密码加密有点类似哟。 10 11 print('yinzhengjie'.replace('e', 'E', 2)) # 将字符串中的某个字符换成另外的一个字母或者数字(字符),后面可以匹配相应的次数,依次从左往右开始匹配。 12 13 print('yin zheng jie'.split()) # 将字符串按照空格分成一个列表 14 15 print('1+2+3+4+5'.split('+')) # 用“+”作为分隔符,将其变成一个列表,如果不指定的话是以默认以空格分隔符的,例子如上 16 17 print('YinZhengJie'.swapcase()) # 将字符串中的大小写互换 18 19 print('yin zheng jie'.title()) # 将以空格为分隔符的所有的小写字母变大写 20 21 print('yinzhengjie'.zfill(50)) # 总共需要打印50个字符,如果字符串不够的话前面用0占位 22 23 24 25 #以上代码执行结果如下: 26 {9$}85$7091115 27 yinzhEngjiE 28 ['yin', 'zheng', 'jie'] 29 ['1', '2', '3', '4', '5'] 30 yINzHENGjIE 31 Yin Zheng Jie 32 000000000000000000000000000000000000000yinzhengjie
四.字符串编码操作
我们在计算机上编辑工作文档或是发博客文章等等,最终这些数据都会保存到我们的磁盘上去,那么保存到磁盘到底是以什么样的方式进行保存的呢?其实就是以连续的“0”或者“1”的方式进行保存的。连续八个“0”或者“1”我们称之为一个字节(1byte=8bits)。存储汉字有很多种编码格式,如Unicode,也有utf-8,还有gbk,gb2312等等。接下来我们就一起看看如何将字符串进行编码解码操作(编码就是讲数据类型(字符串)转换成二进制(当然可以用十六进制去读取),解码就是相反的操作)。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 name = "尹正杰" 9 10 v1 = name.encode(encoding="utf-8") #这就是对字符串做编码操作,将数据从字符串类型转换成二进制类型,但是显示的时候并不是“0”或者“1”哟,而是以十六进制显示。 11 print(v1) 12 13 v2 = name.encode(encoding="gb2312") 14 print(v2) 15 16 v3 = name.encode(encoding="gbk") #和上面操作一样,只不过我们这里指定这个字符串编码格式以“gbk”方式进行编码,这样我们就可以将这个数据写入到磁盘上去。 17 print(v3) 18 19 v4 = v3.decode(encoding="gbk") #这里就是进行解码操作,需要传入V3编码的格式,如果格式和V3编码格式不一致就会报错哟!如:UnicodeDecodeError. 20 print(v4) 21 22 v5 = v2.decode(encoding="gb2312") 23 print(v5) 24 25 v6 = v1.decode(encoding="utf-8") 26 print(v6) 27 28 29 30 31 #以上代码执行结果如下: 32 b'xe5xb0xb9xe6xadxa3xe6x9dxb0' 33 b'xd2xfcxd5xfdxbdxdc' 34 b'xd2xfcxd5xfdxbdxdc' 35 尹正杰 36 尹正杰 37 尹正杰