最早的编码为ASCII码(包含0-9、A-Z、a-z、符号(空格、制表符等)),最多支持256个符号(每个符号占1字节) GBK/GB2312:我国制定的中文编码标准,一个字节表示因为字母,两个字节表示中文字符 UTF-8编码:国际通用编码,一个字节表示英文字符,三个字节表示中文 Python中常用字符串类型: str:使用Unicode字符(一个字符代表若干个字节) eg:“拼搏到感动自己” bytes:二进制数据,是带有b成对的字符串(用“”或‘’表示) eg:b'\xd2\xb0'和b'mr' str和bytes不能拼接在一起使用,str要存放在磁盘或者在网络上传输,需要把str转换层bytes 使用encode()方法转换层bytes 一、字符串编码转换:str.encode([endoding="utf-8"][,errors= "strict"])
      • str:字符串名
      • endoding="utf-8"(可选参数):指定编码时使用的编码
        • 默认使用utf-8,当只有这一个参数时,可以省略的携程utf-8)
        • 如果要设置问简体中文,可设置为GB2312
      • errors= "strict"(可选参数):指定错误处理方式
        • strict:遇到异常立即抛出错误(默认值)
        • ignore:忽略非法字符
        • replace:用?替换异常错误
        • xmlcharrefreplace:使用xml字符的引用
eg:str1 = "野渡无人舟自横" byte = str1.encode("utf-8") byte1 = str1.encode("GBK") print(str1) print(byte) 二、使用decode()方法解码:str.decode([encoding="utf-8"][,errors="strict"]) 可选同encode一样 news = byte.decode("utf-8") 解码时的,指定编码时需要和转码时指定的编码方式需要一致 三、字符串常用操作 单引号、双引号、三引号都是标示字符串的(单引号和双引号必须写在一行上,三引号可以写在多行上)
  • 拼接字符串:序列相加,把多个字符串相加,拼成一个字符串(字符串不允许直接与其他数据类型拼接)
eg:str1 = "我今天一共走了" num = 17890 str2 = "步" print(str1 + str(num) + str2) eg:str1 = "程序员甲:搞IT太辛苦了,我想换行…怎么办?" str2 = "程序员乙:敲一下回车键" print(str1 + "\n" + str2)
  • 计算字符串的长度:使用len(string) #不管多少个字,都按照一个字符串来计算
      • 指一个字符串所占的字节数(英文字母、数字、下划线等占1字节,中文汉字占2-4个字节)
      • 不通的编码方式,得出的结果可能会不一样
eg:str1 = "人生苦短,我用Python" print(len(str1)) print(len(str1.encode())) #计算使用utf-8编码的长度 print(len(str1.encode("gbk"))) 四、截取字符串:其实就是切片方法
  • 字符串的索引:从左到右依次增加(从0开始)
str2 = str1[2] #获取第二个字符串(获取指定位置的值) str3 = str1[2:] #获取第二个字符串到末尾的字符串 str4 = str1[:5] #获取左边5个字符串 str5 = str1[2::2] #获取步长为2,开始位置为2的的值
  • 获取切片的位置不存在时,抛出一个空值,获取的指定索引值不存在时,或抛出错误代码(可以用try…except捕获错误,后续会讲到)
idcard = "123456199006277890" birthday = idcard[6:10]+ "年" + idcard[10:12] + "月" + idcard[12:14] + "日" print("出生日期为:" + birthday + ",生日为:" + birthday[5:])
  • 分割字符串:listname = str.split(sep,maxsplit) ---splist方法
listname:返回的值 str:被切分的对象 sep:指定分隔符(可包含多个字符,默认为空白符None(空格、换行、制表符、\t等)) maxsplit:指定分割次数(不指定该参数或者为-1时,则分割次数没有限制;否则返回结果列表的元素个数最多为maxsplit+1;要指定maxsplit必须指定sep) eg:a = "你 有 多 自信, \n 世界 就有 多 相信你!" print(a.split()) print(a.split(" ")) print(a.split(" ")) print(a.split(" ",5)) print(a.split("\n")) eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使" b = a.split(" ") #空格做分隔符 for i in b: print(i[1:]) #去掉@符号显示
  • 合并字符串:strnew = string.join(iterable) ---join方法
strnew:接收返回的值 string:合并时的分隔符 iterable:可迭代对象(可以是列表,可以是元组) eg:a = ["明日科技","扎克伯格","俞敏洪","勤奋的天使"] b = " @".join(a) #用空格和@进行连接 print("@"+b) 五、检索字符串count(),find(),index(),startswith(),endswith() count():检测字符串出现的次数:str.count(sub[,start[,end]]) str:表示原字符串 sub:表示要检索的子字符串 start:可选参数,表示检索范围的起始位置(不指定,就从头开始) end:可选参数,表示检索范围的结束为止(不指定,则到结尾) eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使" print(a.count("@")) find():str.find(sub[,start[,end]]) 方法用于检索是否包含指定的子字符串,检索字符串不存在,则返回-1,否则返回首次出现的索引值 eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使" print(a.find("@")) index():str.index(sub[,start[,end]]) 和find方法类似,检索字符串不存在,则返回-1,否则返回首次出现的索引值,只是当index方法检索的字符串不存在时会抛出异常 startswith():str.startswith(sub[,start[,end]]) 用于检索字符串是否以指定字符串开头,如果是这返回True,否则返回False endswith():str.endswith(sub[,start[,end]]) 用于检索字符串是否以指定字符串结尾,如果是这返回True,否则返回False 六、字母的大小写转换
  • lower():将字符串中全部大写字母转换为小写字母(如无被转换字符,则返回原值,否则返回新值):str.lower()
  • upper():将字符串的全部小写字母转换为大写字母(如无被转换字符,则返回原值,否则返回新值):str.upper()
eg:username_1 = '|MingRi|mr|mingrisoft|WGH|MRSoft|' # 假设已经注册的会员名称保存在一个字符串中,以|进行分隔 username_2 =username_1.lower() # 将会员名称字符串转换为全部小写 regname_1 = input('输入要注册的会员名称:') regname_2 = '|' + regname_1.lower() + '|' # 将要注册的会员名称也转换为全部小写 if regname_2 in username_2: # 判断输入的会员名称是否存在 print('会员名',regname_1,'已经存在!') else: print('会员名',regname_1,'可以注册!') 七、去除字符串中的空格和特殊字符:(特殊字符指:制表符\t,回车符\r、换行符\n等) strip():用于去掉字符串左右两侧的空格和和特殊字符串:str.strip([chars]) str:要去除的字符串名 chars:可选参数,用于指定要去除的字符,可以指定多个(不指定时,默认去除空格、制表符、回车符、换行等) lstript():用于去掉字符串左侧的空格和特殊字符串:str.lstrip([chars]) rstript():用于去掉字符串右侧的空格和特殊字符串:str.rstrip([chars]) 八、格式化字符串: 格式化字符串的意思是先指定一个模板,在这个模板中预留几个空位,再根据需要填写相应的内容(这些空位需要通过指定的符号标记(也称占位符),而这些符号还不会显示出来)
  • 使用%操作符(早期版本):定义模板:‘%[-][+][0][m][.n]格式化符号'%exp
    • -:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号
    • +:可选参数,用于指定右对齐,正数前方无符号,负数前面加负号
    • 0:可选参数,表示右对齐,正数前方元符号,负数前面加负号,用0填充空白处(一般与m参数一起使用)
    • m:可选参数,表示占有宽度
    • .n:可选参数,表示小数点后保留的位数
    • exp:要转换的项(如果要指定的项有多个,需要以元组的形式指定)
    • 格式化符号:主要有s、d、c、e、g、b、o、x、f、 %
eg:template = '编号:%09d\t公司名称:%s \t 官网:http://www.%s.com' #定义模板 item = (7,'百度','baidu') #定义要转换的内容 print(template%item) 常用格式化字符: s:字符串(采用str()显示) c:单个字符 d或者i:十进制整数 x:十六进制整数 f或F:浮点数 r:字符串(采用repr()表示) o:八进制整数 e:指数(基底写为e) E:指数(基底写为E) %:字符%
  • 使用format()方法(新版本,常用):str.format(args)
---str用于指定字符串的显示样式(模板),args用于指定要转换的项(有多项时,用“,”隔开) 创建模板:创建模板时,需要使用{}和:指定占位符,基本语法格式如下: {[index][:[[fill]align][sign][#][width][.precision][type]]}
        • index:可选,指定要设置哥还是的对象在参数列表中的索引位置(从0开始,不指定则根据值得先后顺序自动分配)
        • fill:可选,用于指定空白处填充的字符
        • align:可选,用于指定对其方式(<表示内容左对齐;>表示内容右对齐;=表示内容右对齐,并将符号放在填充内容的最左侧,且只对数字类型有效;值为^表示内容居中,需要配合width使用)
        • sign:可选,用于指定有无符号数(+表示正数加正号,负数加负号;-表示正数不变,负数加负号;值为空格表示正数加空格,负数加负号)
        • #:可选参数,对于耳机子、八进制、十六进制,如果加上#号,表示会显示0b/0o/0x前缀,否则不显示
        • width:可选,指定所占宽度
        • .precision:可选,用于指定保留的小数位数
        • type:可选参数,指定要格式化的数据类型
常用格式化字符: s:对字符串类型格式化 d:十进制整数 c:将十进制整数自动转换为对应的Unicode字符 e或E:转换为科学计数法表示再格式化 g或G:自动在e和f或E或F中切换 b:将十进制整数自动转换为二进制表示再格式化 o:将十进制整数自动转换为八进制表示在格式化 x或X:将是金子整数自动转换成十六进制表示再格式化 f或F:转换为浮点数(默认小数保留6为)再格式化 %:显示百分比(默认显示小数点后六位) eg:template = '编号:{:0>9s}\t公司名称:{:s} \t官网:http://www.{:s}.com' context1 = template.format("7","百度","baidu") print(context1) eg:import math #导入数学模块 print("以货币形式显示:¥{:,.2f}元".format(1251+3950)) #以货币形式显示 print("{0:.1f}用科学计数法表示:{0:E}".format(12000.1)) #以科学计数法表示 print("π取5位小数:{:.5f}".format(math.pi)) #输出小数点后5位 print("{0:d}的十六进制是:{0:#x}".format(100)) #十六进制显示 print("天才是有{:.0%}的灵感,加上{:.0%}的汗水。".format(0.01,0.99))
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄