05.字符串
# 拼接字符串 s1 = '121' s2 = '1sda' s3 = 213 print(s1 + '---' + s2) # 121---1sda # print(s1 + s2 + s3) # TypeError: can only concatenate str (not "int") to str print(s1 + s2 + str(s3)) # 1211sda213 print(s1 + '\n' + s2) # 121 # 1sda s4 = '人123' print(len(s4)) # 4 # python中,数字,英文,小数点,下划线,空格占一个字节,一个汉字可能占2~4个字节, # 汉字在gbk/gb2312占2个字节,utf-8/unicode占3个字节(或4个字节) print(len('我'.encode('utf-8'))) # 3 print(len('人'.encode('utf-8'))) # 3 print(len('我'.encode('gbk'))) # 2 print(len('人'.encode('gbk'))) # 2
截取字符串:
# 截取字符串 str1 = '123456' s1 = str1[1] s2 = str1[3:] s3 = str1[:3] s4 = str1[1:3] print(s1 + ' ' + s2 + ' ' + s3 + ' ' + s4) # 2 456 123 23 try: print(str1[6]) except IndexError: print('str[6]不存在') # str[6]不存在
分割,合并字符串:
# 分割,合并字符串 s1 = '1,2,3.4-5' # split(sep,maxsplit) 分割 # sep:指定分割符,默认None # maxsplit:可选参数,分割的次数,如果不指定或者为-1,则没有次数限制 print(s1.split(sep=',', maxsplit=1)) # ['1', '2,3.4-5'] print(s1.split(sep=',2')) # ['1', ',3.4-5'] # str.join(iterable) 合并字符串,将每个元素用空格加str进行连接 l_f = ['a', 'b', 'c'] s_f = '@'.join(l_f) print(s_f) # a@b@c
检索字符串:
# 检索字符串 # count(x,start,end) # x:表示要检索的子字符串 # start:可选参数:表示检索范围的起始位置的索引,默认从头开始 # end:可选参数:表示检索范围的结束位置的索引,默认到结尾 str1 = '@a,@2,@3' print(str1.count('@')) # 3 print(str1.count('1')) # 0 # find(sub,start,end),首次出现sub的位置索引,找不到返回-1 print(str1.find('@')) # 0 print(str1.find('1')) # -1 print(str1.rfind('@')) # 6 # index(),与find类似,但找不到会抛出异常 print(str1.index('@')) # 0 # print(str1.index('1')) # ValueError: substring not found # startswith(prefix,start,end) 是否以prefix开头,是返回True,否则返回False print(str1.startswith('@')) # True # endswith(suffix,start,end) 是否以suffix结尾,是返回True,否则返回False print(str1.endswith('@')) # False
字母的大小写转换:
# 字母的大小写转换 str1 = 'AvcaeD' print(str1.lower()) # avcaed print(str1.upper()) # AVCAED
去除字符串中的左右两侧空白字符和特殊字符:
# 去除字符串中的左右两侧空白字符和特殊字符 str1 = ' df ' print(len(str1)) # 6 # 去左右两侧空格 print(len(str1.strip())) # 2 str2 = ' @df ' # 去左右两侧空格跟@ print(str1.strip('@ ')) # df print(len(str1.strip('@ '))) # 2 # 去左侧的@ str2 = '@21@' print(str2.lstrip('@')) # 21@ # 去右侧的@ print(str2.rstrip('@')) # @21
格式化字符串:
# 使用'%'操作符 # '%[-][+][0][m][.n]格式化字符'%exp # -:可选参数,指定左对齐,正数前无符号,负数前加负号 # +:可选参数,指定右对齐,正数前无符号,负数前加负号 # 0:可选参数,指定右对齐,正数前无符号,负数前加负号,用0填充空白处(一般与m参数一起使用) # m:可选参数,表示占有宽度 # .n:可选参数,表示小数点后保留的位数 print('id:%08d\t公司:%s\t官网:http://www.%s.com' % (1, '百度', 'baidu')) # id:00000001 公司:百度 官网:http://www.baidu.com
# 使用字符串对象的format()方法 # {[index][:[fill]align][sign][#][width][.precision][type]} # index:可选参数,指定要设置格式的对象在参数列表中的索引位置,从0开始,默认按顺序自动分配,一个模版中,要么全部指定,要么全部采用自动 # fill:可选参数,指定空白填充的字符 # align:可选参数,对齐方式,值<表示左对齐,>表示右对齐,=表示右对齐,将符号放在填充内容的最左侧,且只对数字类型有效,值为^表示居中,配合 # width一起使用 # sign:可选参数,指定有无符号数,值为+正数加正号,负数加负号;值为-正数不变,负数加负号;值为空格,正数加空格,负数加负号 # #:可选参数,对2,8,16进制,加#表示会显示0b/0o/0x前缀,否则不显示 # width:可选参数,指定所占宽度 # .precision:可选参数,指定小数点后保留的位数 # type:可选参数,指定类型 template = 'id:{0:0>8s}\t公司:{1:s}\t官网:http://www.{2:s}.com' print(template.format('1', '百度', 'baidu')) # id:00000001 公司:百度 官网:http://www.baidu.com import math print('¥{:,.2f}'.format(1250000)) # ¥¥1,250,000.00 print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1)) # 120000.1用科学计数法表示:1.200001E+05 print('pi取5位小数:{:.5f}'.format(math.pi)) # pi取5位小数:3.14159 print('{0:d}的16进制结果:{0:#x}'.format(100)) # 100的16进制结果:0x64 # 输出百分比,并且不带小数 print('{:.0%}'.format(0.06)) # 6%
编码与解码:
# 字符串编码转换 # encode(),str对象的方法,用于将字符串转为二进制数据(即bytes),也就是编码 ver = '字符串编码转换' byte = ver.encode('GBK') print(ver) # 字符串编码转换 print(byte) # b'\xd7\xd6\xb7\xfb\xb4\xae\xb1\xe0\xc2\xeb\xd7\xaa\xbb\xbb' # decode()解码,bytes对象的方法,用于将二进制数据转为字符串 print(byte.decode('GBK')) # 字符串编码转换
print('{:^24}'.format('----分割线----')) # 居中
打印带颜色的字符串:
print(\033[显示方式;前景色;背景色m输出内容\033[0m),其中,显示方式、前景色、背景色都是可选参数(可缺省一个或多个)
print("\033[37;40m黑色背景\033[0m") #控制台设置白色主题,显示黑色,黑色主题显示白色 print("\033[37;41m红色背景\033[0m") print("\033[37;42m绿色背景\033[0m") print("\033[37;43m黄色背景\033[0m") print("\033[37;44m蓝色背景\033[0m") print("\033[37;45m紫色背景\033[0m") print("\033[37;46m青色背景\033[0m") print("\033[1;30;47m白色背景\033[0m")#与控制台设置主题有关