目录
一. 拼接
二. 计算字符串长度
三. 截取字符串
(一)普通截取
(二)反向输出字符串
四. 分割、合并字符串
(一)分割字符串
(二)合并字符串
五. 检索字符串
(一)包含子字符串的个数
(二)是否包含子字符串
六. 字母大小写转换
(一)判断首字母是否大写
(二)首字母转大写
(三)全部字母转大写
(四)全部字母转小写
七. 去除空格、特殊字符
八. 格式化字符串
九. 替换子字符串
一. 拼接
"字符串1" + "字符串2"
str1 = "我今天一共走了:" num = 12098 str2 = '步' try: print(str1+num+str2) except TypeError: print("num是数值,不是字符串") print(str1+str(num)+str2) # num是数值,不是字符串 # 我今天一共走了:12098步'字符1'.join("字符串1")
- 在“字符串1”的每个字符之间加入“字符1”
print('*'.join("计算机二级等级考试")) # 计*算*机*二*级*等*级*考*试二. 计算字符串长度
len(字符串名)
str1 = "人生苦短,我用Python!" print(len(str1)) # 14三. 截取字符串
(一)普通截取
字符串名[start : end : step]
str1 = "人生苦短,我用Python!" print(str1[1])#截取第2个字符 print(str1[5:])#从第6个字符截取一直到结束 print(str1[:5])#从第1个字符截取到第5个 print(str1[2:5])#截取第3至5个字符 # 生 # 我用Python! # 人生苦短, # 苦短,(二)反向输出字符串
字符串名[ : :-1]
str1 = "人生苦短,我用Python!" print(str1[::-1])#截取第2个字符 # !nohtyP用我,短苦生人四. 分割、合并字符串
(一)分割字符串
字符串名.split('指定分隔符',分割次数)
- 指定分隔符:默认为None,即承认所有非字符(包括空格、换行符\n、制表符\t等)
- 分割次数:指定分割次数;若为None或-1,则分割次数无限制
- 若“分割次数”指定,则“指定分隔符”必须指定
- 若“指定分隔符”不指定,则“分割次数”也不能指定
str1= "你 有 多自信,\n世界 就有" print(str1.split())#不指定分隔符与分割次数,则将所有空格和换行符\n视为分隔符;分割次数不限 print(str1.split(' '))#将一个空格视为分隔符,\n不是;分割次数不限 print(str1.split(' ',3))#将一个空格视为分隔符,分割3次 # ['你', '有', '多自信,', '世界', '就有'] # ['你', '', '有', '多自信,\n世界', '就有'] # ['你', '', '有', '多自信,\n世界 就有'](二)合并字符串
新字符串名 = '用于连接的符号'.join(原字符串)
lis_friend = ["巴菲特","比尔盖茨","卡尔本茨"] str_friend = '@'.join(lis_friend) print(str_friend) # 巴菲特@比尔盖茨@卡尔本茨五. 检索字符串
(一)包含子字符串的个数
字符串名.count('要检索的内容', start, end)
LunYu = ''' 子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! 子曰:巧言令色,鲜矣仁! 曾子曰:吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎? 子曰:道千乘之国,敬事而信,节用而爱人,使民以时。 子曰:弟子入则孝,出则弟,谨而信,泛爱众,而亲仁。行有余力,则以学文。 子夏曰:贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣。 子曰:君子不重则不威,学则不固。主忠信,无友不如己者,过则勿惮改。 曾子曰:慎终追远,民德归厚矣。 子禽问于子贡曰:夫子至于是邦也,必闻其政,求之与,抑与之与?”子贡曰:“夫子温、良、恭、俭、让以得之。夫子之求之也,其诸异乎人之求之与? 子曰:父在,观其志。父没,观其行;三年无改于父之道,可谓孝矣。''' print(LunYu.count("子曰"))#统计“子曰”出现的次数 print(LunYu.count(","))#统计逗号“,”出现的次数 # 9 # 30(二)是否包含子字符串
字符串名.find('子字符串', start, end)
- 包含:返回第一次出现所在的索引值
- 不包含:返回-1
LunYu = ''' 子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! ''' print(LunYu.find("子曰:"))#是否包含“子曰:” print(LunYu.find("父曰:"))#是否包含“父曰:” # 1 # -1"子字符串" in 字符串
- 包含:True
- 不包含:False
LunYu = ''' 子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! ''' print("子曰:" in LunYu) #是否包含“子曰:” print("父曰:" in LunYu) #是否包含“父曰:” # True # False字符串名.index('子字符串', start, end)
- 包含:返回首次出现的位置索引(从左向右)
- 不包含:报错
LunYu = ''' 子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! ''' print(LunYu.index("子曰:"))#是否包含“子曰:” try: print(LunYu.index("父曰:"))#是否包含“父曰:” except ValueError: print("字符串中不包含‘父曰:’") # 1 # 字符串中不包含‘父曰:’字符串名.rindex('子字符串', start, end)
- 包含:返回首次出现的位置索引(从右向左)
- 不包含:报错
LunYu = ''' 子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! ''' print(LunYu.rindex("子曰:"))#是否包含“子曰:” try: print(LunYu.rindex("父曰:"))#是否包含“父曰:” except ValueError: print("字符串中不包含‘父曰:’") # 54 # 字符串中不包含‘父曰:’字符串名.startswith('子字符串', start, end)
- 判断字符串是否以子字符串开头
- 返回值:True、False
LunYu = '''子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? 子曰:其为人也孝弟而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与! ''' print(LunYu.startswith("子曰:"))#是否包含“子曰:” print(LunYu.startswith("父曰:"))#是否包含“父曰:” # True # False字符串名.endswith('子字符串', start, end)
- 判断字符串是否以子字符串结尾
- 返回值:True、False
LunYu = "子曰:学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?" print(LunYu.endswith("!"))#是否以“!”结尾 print(LunYu.endswith("?"))#是否以“?”结尾 # False # True六. 字母大小写转换
(一)判断首字母是否大写
字符串.istitle( )
- 判断每个单词的首字母是否都以大写开头
str_1 = "Hello World" print(str_1.istitle()) # True(二)首字母转大写
字符串.title( )
- 将每个首字母都以大写开头
str_1 = "hello world" print(str_1.title()) # Hello World(三)全部字母转大写
字符串名.upper( )
str_1 = "Hello World" print(str_1.upper()) # HELLO WORLD(四)全部字母转小写
字符串名.lower( )
str_1 = "Hello World" print(str_1.lower()) # hello world七. 去除空格、特殊字符
字符串名.strip('要删1', '要删2', ... ,'要删n')
- 字符串名.strip( ):删除左右两端空格与特殊字符,不删中间
- 字符串名.strip(' '):删除左右两端的空格,不删特殊字符,不删中间
- 字符串名.strip('\n'):删除左右两端的特殊字符,不删空格,不删中间
str_1 = " 相信 自己\n" print(str_1.strip()) print(str_1.strip(' ')) print(str_1.strip('\n')) # 相信 自己 # 相信 自己 # # 相信 自己字符串名.lstrip('要删1', '要删2', ... ,'要删n')
- 字符串名.lstrip( ):删除左侧空格与特殊字符
str_1 = " 相信 自己\n" print(str_1.lstrip()) print("111") # 相信 自己 # # 111字符串名.rstrip('要删1', '要删2', ... ,'要删n')
- 字符串名.strip( ):删除左右两端空格与特殊字符,不删中间
- 字符串名.strip(' '):删除左右两端的空格,不删特殊字符,不删中间
- 字符串名.strip('\n'):删除左右两端的特殊字符,不删空格,不删中间
str_1 = " 相信 自己\n" print(str_1.rstrip()) print("111") # 相信 自己 # 111八. 格式化字符串
'%[-][+][0][m][.n][格式字符]'%[exp]
-:用以指定左对齐,正数前无符号,负数前加负号
+:用以指定右对齐,正数前加正号,负数前加负号
0:表示右对齐,正数前无符号,负数前加负号,空白处用0填充
m:表示占有宽度
.n:表示小数点后保留位数
格式字符:
- %s:字符串,str()表示
- %r:字符串,表示
- %c:单个字符
- %o:八进制整数
- %d:十进制整数
- %x:十六进制整数
- %f:浮点数
- %e:指数
- %%:字符%
exp:要转换的项,多个项时用元组,不可用列表
name = ("一梦","冷毅毅","香凝","带蓝") const = ("水瓶座","射手座","双鱼座","双子座") age = (26, 24, 30, 21) template = "序号:%03d\t姓名:%s\t星座:%s\t年龄:%2d" # %03d:右对齐空白处用0填充、占有3宽度、十进制整数 # %s:字符串表示 # %2d:占有2宽度、十进制整数 for i in range(len(name)): people_list = [i,name[i], const[i], age[i]] people_tuple = tuple(people_list) print(template%people_tuple) # 序号:000 姓名:一梦 星座:水瓶座 年龄:26 # 序号:001 姓名:冷毅毅 星座:射手座 年龄:24 # 序号:002 姓名:香凝 星座:双鱼座 年龄:30 # 序号:003 姓名:带蓝 星座:双子座 年龄:21字符串模板.format(参数1, 参数2, ... ,参数n)
字符串模板:{[1]: [2] [3] [4] [5] [6] .[7] [8]}
1. 参数所在的索引值
2. 填充字符
3. 对齐方式
- 左对齐:<
- 右对齐:>
- 居中对齐:^
4. 有无符号数
5. 是否加前缀 #(进制转换时)
6. 所占宽度
7. 保留位数
8. 指定类型
- S:字符串
- D:十进制
- C:十进制对应Unicode字符
- b:二进制
- o:八进制
- x:十六进制
- e:科学计数法
- f:浮点数
- %:百分号
print('{0:0>5s}'.format('7')) # 0:参数的索引值为0(可省略)'{:0>5s}' # 0:用0填充空白字符(可换成其他字符)'{:@>5s}' @@@@7 # >:右对齐 # 5:占5个字符宽度 # s:对字符串格式化当占位符{ }数量多于参数时,占位符{}必须指定参数索引值
try: print("{}开{}落".format('花')) except IndexError: print("IndexError") print("{0}开{0}落".format('花')) # 花开花落当占位符与参数数量相等且对应时,占位符{}可以不加参数索引值
print("{}曰:学而时习之,不亦{}".format("孔子","说乎")) # 孔子曰:学而时习之,不亦说乎当占位符与参数数量相等,但位置不对应时,占位符{}必须加参数索引值
print("{1}曰:学而时习之,不亦{0}".format("说乎","孔子")) # 孔子曰:学而时习之,不亦说乎当占位符与参数数量相等,但位置不对应时,占位符{}必须全部加参数索引值,不能只加某几个
try: print("{}曰:学而时习之,不亦{0}".format("说乎","孔子")) except ValueError : print("ValueError") print("{1}曰:学而时习之,不亦{0}".format("说乎","孔子"))name = ("一梦","冷毅毅","香凝","带蓝") const = ("水瓶座","射手座","双鱼座","双子座") age = (26, 24, 30, 21) template = "序号:{:#>3d}\t姓名:{:s}\t星座:{:s}\t年龄:{:2d}" for i in range(len(name)): print(template.format(i+1,name[i],const[i],age[i])) # 序号:##1 姓名:一梦 星座:水瓶座 年龄:26 # 序号:##2 姓名:冷毅毅 星座:射手座 年龄:24 # 序号:##3 姓名:香凝 星座:双鱼座 年龄:30 # 序号:##4 姓名:带蓝 星座:双子座 年龄:21print("1251+3950 的结果为(用货币形式显示):{:,.2f}¥".format(1251+3950)) # 参数的索引值为0(已省略) # ,:逗号表示千位分隔符 # .2:保留两位小数 # f:浮点数 # 1251+3950 的结果为(用货币形式显示):5,201.00¥print("{0:.1f}用科学计数法表示:{0:e}".format(120000.1)) # 当占位符{}数量多于参数时,必须指定参数索引值。参数的索引值为0 # 0:参数的索引值为0 # .1:保留一位小数 # f:用浮点数表示 # 0:参数的索引值为0 # e:用科学计数法表示 # 120000.1用科学计数法表示:1.200001E+05import math print("Pi取五位小数:{:.5f}".format(math.pi)) # 参数的索引值为0(已省略) # .5:保留5位小数 # f:用浮点数表示 # Pi取五位小数:3.14159print("{0:d}的16进制表示为:{0:#x}".format(100)) # 0:当占位符{}数量多于参数时,必须指定参数索引值。参数的索引值为0 # d:十进制表示 # 0:当占位符{}数量多于参数时,必须指定参数索引值。参数的索引值为0 # #:加前缀,十六进制前缀为0x # x:十六进制表示 # 100的16进制表示为:0x64print("{:#^20}".format("等级考试")) print("等级考试".center(20, "*")) # ########等级考试######## # ********等级考试********九. 替换子字符串
replace("原字符或字符串", "新字符或字符串")