Python基础--字符串编码转换以及字符串常用操作

    科技2022-07-13  160

    import math # 导入Python的数学模块 # 字符串的编码转换 # 基础知识:python中有两种常用的字符串类型,包括str(Unicode编码)和bytes(二进制数据),两者之间可以通过encode()和decode()方法进行转换 # 1 使用encode()编码 encode()方法以指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。 ''' encode()方法语法:str.encode(encoding='UTF-8',errors='strict') 参数 encoding -- 要使用的编码,如: UTF-8,可以省略encoding=。 errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 其他可能得值有 'ignore(忽略非法字符)', 'replace(用?替换非法字符)', 'xmlcharrefreplace(使用XML的字符引用)', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。 返回值:该方法返回编码后的字符串,它是一个 bytes 对象。 ''' str1 = "小桥流水人家" bytes1 = str1.encode("GBK", errors="strict") bytes2 = str1.encode("UTF-8", errors="strict") print("str1=", str1) print("bytes1=", bytes1) # 二进制数据: b'\xd0\xa1\xc7\xc5\xc1\xf7\xcb\xae\xc8\xcb\xbc\xd2' print("bytes1=", bytes2) # 2 使用decode()方法解码 decode()方法使用注册编码的编解码器的字符串进行解码。 ''' decode()方法的语法:str.decode(encoding='UTF-8',errors='strict') 参数:encoding -- 这是所使用的编码。对于所有的编码方案的列表,请访问:标准编码库 errors -- 这可能是给定一个不同的错误处理机制。默认的错误是“严格”,即编码错误提出UnicodeError。其他可能的值是ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 并通过codecs.register_error().注册的任何其他名称。 返回值;此方法返回的字符串的解码版本 ''' # 解码采用的字符编码,需要和编码采用的字符编码一样 print("bytes1:GBK()解码后:", bytes1.decode("GBK")) print("bytes2:UTF-8()解码后:", bytes2.decode("UTF-8")) # 字符串的常用操作 # 1 字符串的拼接 使用”+“可以实现两(多)个字符串的拼接,产生有一个字符串对象 str2 = "醉里挑灯看剑" str3 = " 梦回吹角连营" str4 = str2 + str3 print("拼接后:", str4) # 2 计算字符串的长度 使用len()函数 语法:len(string) str5 = "人生苦短,我要用Python!" print(str5, "str5的长度:", len(str5)) # 注意:使用len()函数计算字符串长度时,不区分英文、数字和汉字 print("字符串GBK编码后长度:" + str(len(str5.encode("GBK")))) # 3 字符串的截取(切片) 语法: string[start :end : step] # start 要截取的第一个字符串的索引,可以不指定,默认为0 # end 要截取的最后一个字符串的索引,可以不指定,默认为字符串长 # step 可以不指定,默认为1.步长省略时 ,最后一个冒号可以省略 str5 = "012345678" print(str5[0:5]) # 截取第一位到第五位的字符 print(str5[:]) # 截取字符串的全部字符 print(str5[6:]) # 截取第七个字符到结尾 print(str5[:-5]) # 截取从头开始到倒数第五个字符之前 print(str5[2]) # 截取第三个字符 print(str5[-1]) # 截取倒数第一个字符 print(str5[::-1]) # 创造一个与原字符串顺序相反的字符串 print(str5[-3:-1]) # 截取倒数第三位与倒数第一位之前的字符 print(str5[-3:]) # 截取倒数第三位到结尾 print(str5[:-6:-3]) # 逆序截取,截取倒数第六位数与倒数第一位数之间,步长是3 此处默认start是-1 try: # 如果指定的索引不存在,可以采用try ... except 语句捕获异常 obj1 = str5[21] print(obj1) except IndexError: print("指定的索引不存在") # 4 分割字符串 使用split()方法 ''' 语法格式:str.split(str="", num=string.count(str)). str -- 用于指定分隔符,可以指定多个字符,默认为所有的空字符None,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数。可选参数,默认为 -1, 即分隔所有,分割没有次数 返回值: 分割后的字符串列表。 ''' str6 = "未 来 科 技 >>> Line1-abcdef \nLine2-abc \nLine4-abcd \nwww.nihao.com" print(str6) print(str6.split()) # 以空格为分隔符,包含 \n。无论有几个空格或者空白符,都作为一个分割符使用 print(str6.split(">>>")) # 以多个字符进行分割 print(str6.split(".")) # 以多个字符进行分割 print(str6.split(' ', 1)) # 以空格为分隔符,分隔成两个 print(str6.split(' ', 4)) # 以空格为分隔符,分隔前四个 print(str6.split('>')) # 以>为分隔符.当指定的分隔符出现多次时,就会每分割一次,没有得到内容的,将产生一个空元素 # 5 合并字符串 使用join()方法 ''' 描述:Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 语法 join()方法语法: strnew=string.join(sequence) 参数: sequence -- 要连接的元素序列,即可以迭代的对象,该对象中的所有元素(字符串表示)将被合并为一个新的字符串。 string--字符串类型,用于指定合并时的分隔符,作为边界点分割出来。 返回值:返回通过指定字符连接序列中元素后生成的新字符串。 ''' # 实例 str7 = ("a", "b", "c") # 字符串序列 str8 = ["a", "b", "c", "d"] print("-".join(str7)) str9 = "@" + (" @".join(str8)) print(type(str9)) print(str9) # 6 检索字符串 count()方法 find()方法 index()方法 startwith()方法 endwith()方法 in关键字 ''' find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。 find()方法语法: str.find(str1, beg=0, end=len(string)) python中还提供了rfind()方法,作用与find()方法类似,只是从右边开始查找 参数 str -- 指定检索的字符串 beg -- 开始索引,默认为0。 end -- 结束索引,默认为字符串的长度。 返回值:如果包含子字符串返回开始的索引值,否则返回-1。 count() 方法用于统计字符串里某个字符出现的次数,不存在返回0。可选参数为在字符串搜索的开始与结束位置。 count()方法语法:str.count(str1, beg=0, end=len(string)) 返回值:该方法返回子字符串在字符串中出现的次数 index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。 index()方法语法:str.index(str, beg=0, end=len(string)) 返回值:如果包含子字符串返回开始的索引值,否则抛出异常。 startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。 str.startswith(str, beg=0,end=len(string)); 返回值:如果检测到字符串则返回True,否则返回False。 endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。 endswith()方法语法:str.endswith(suffix[, start[, end]]) 参数 suffix -- 该参数可以是一个字符串或者是一个元素。 返回值:如果字符串含有指定的后缀返回True,否则返回False。 ''' # 实例 str10 = "未 来 科 技 >>> Line1-abcdef \ Line2-abc Line4-abcd 未来科技 www.nihao.com" print(str10, len(str10)) print(str10.find(">")) # 从下标0开始,查找在字符串里第一个出现的子串,返回结果:9 for i in range(0, 5): # 下标循环从0 开始到 5 print(str10.find("未", i)) # 还可以根据find()返回值是否大于-1来判断子字符串是否在字符串中 print(str10.find("ha9", 0)) # 不包含子字符串返回开始的索引值,返回-1 print(str10.count("Line", 0, 68)) # 从下标0开始,查找“Line”在字符串里出现的次数,返回结果:3 print(str10.count("Line8", 10, 68)) # 不存在返回0 print(str10.index("Line2", 0)) # print(str10.index("Line5", 0)) # 不包含子字符串,抛出异常 print(str10.startswith("Line2", 19)) # 返回False print(str10.startswith("wei", 19, 30)) # 返回False print(str10.startswith("未", 0, 2)) # 返回True print(str10.startswith("Line2", 29)) # 返回True print(str10.endswith("Line2", 2)) # 返回False print(str10.endswith("com")) # 返回True print(str10.endswith(".com", 29, 68)) # 返回True # 7 字符串的大小写转换 ''' lower() 方法转换字符串中所有大写字符为小写。语法:str.lower() 返回值 : 返回将字符串中所有大写字符转换为小写后生成的字符串。 upper() 方法将字符串中的小写字母转为大写字母。语法:str.upper() 返回值 : 返回小写字母转为大写字母的字符串。 ''' str11 = "小明:My Name Is XiaoMing!!" str12 = str11.lower() print(str11, "\n", str12) str13 = str12.upper() print(str13) # 实例 不区分大小写验证会员名是否唯一 username_1 = '|MingRi|mr|mingrsoft|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, '可以注册!') # 8 去除字符串中的空格和特殊字符 strip()函数 lstrip()函数 rstrip()函数 ''' strip([chars]) 方法用于移除字符串头尾指定的字符或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。 strip()方法语法:str.strip([chars]); 参数: chars -- 移除字符串头尾指定的字符序列, 可以指定多个。如果不指定参数,则默认将去除空格、制表符\t、换行符\n、回车符\r)。 返回值:返回移除字符串头尾指定的字符生成的新字符串。 lstrip() 方法用于截掉字符串左边的空格或指定字符。 lstrip()方法语法:str.lstrip([chars]) 返回值:返回截掉字符串左边的空格或指定字符后生成的新字符串。 rstrip() 删除 string 字符串末尾的指定字符(默认为空格). rstrip()方法语法:str.rstrip([chars]) 返回值 : 返回删除 string 字符串末尾的指定字符后生成的新字符串。 ''' # 实例 str14 = "00000003210Runoob01230000000" print(str14.strip("0")) # 去除首尾字符 '0' print(str14.lstrip("0")) # 去除首部字符 '0' print(str14.rstrip("0")) # 去除尾部字符 '0' str15 = " \n Runoob\t \r " # 去除首尾空格 print(str15.strip()) # 默认参数为 空格、制表符\t、换行符\n、回车符\r str18 = " \n Runoob 00 " print(str18.lstrip()) # 默认参数为 空格、制表符\t、换行符\n、回车符\r str19 = " Runoob 00 \n \t " print(str19.rstrip()) # 默认参数为 空格、制表符\t、换行符\n、回车符\r str16 = "@.你好吗,思锐...@." print(str16.strip("@.")) # 去除字符串首尾的“@”或者“.” print(str16.lstrip("@.")) # 去除字符串首部的“@”或者“.” print(str16.rstrip("@.")) # 去除字符串尾部的“@”或者“.” str17 = "12i3abcru12noob3241" print(str17.strip("12")) # 去除字符串首尾的“1”或者“2” print(str17.lstrip("12")) # 去除字符串首部的“1”或者“2” print(str17.rstrip("12")) # 去除字符串尾部的“1”或者“2” # 9 格式化字符串 两种方法:使用%操作符 使用format()函数 ''' 1 使用%操作符 语法格式:%[(name)][flags][width].[precision]typecode % exp 参数:(name) 为命名 flags 可以有 +,-,' '或 0。+ 表示右对齐。- 表示左对齐。' ' 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充。 width 表示显示宽度 precision 表示小数点后精度 exp;要转换的项 2 str.format(),用与字符串的格式化,增强了字符串格式化的功能。 基本语法:str.format(args) arges用于指定要转换的项:{[index][:[[fill]align][sign][#][width][.precision][type]]},是通过 {} 和 : 来代替以前的 % 。 fill:可选参数,用于指定空白处填充的字符 align:可选参数,只当对齐方式 sign:用于指定有无符号参数 format 函数可以接受不限个参数,位置可以不按顺序 ''' print("%6.3f" % 2.3) # 第一个 % 后面的内容为显示的格式说明,6 为显示宽度,3 为小数点位数,f 为浮点数类型 # 第二个 % 后面为显示的内容来源,输出结果右对齐,2.300 长度为 5,故前面有一空格 print("%+10x" % 10) # x 为表示 16 进制,显示宽度为 10,前面有 8 个空格 print("%-5x" % -10) # %-5x 负号为左对齐,显示宽度为 5,故 -a 后面有 3 个空格 pi = 3.1415 print("pi的值是%s" % pi) print("pi的值是%.8f" % pi) print(".*f" % (4, 1.2)) # width, precision 为两个整数,可以利用 *,来动态代入这两个量 # 实例 格式化不同数据类型 print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251 + 3950)) # 以货币形式显示 print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1)) # 用科学计数法表示 print('π取5位小数点:{:.5f}'.format(math.pi)) # 输出小数点后五位 print('{0:d}的16进制结果是:{0:#x}'.format(100)) # 输出十六进制数 print('天才是由 {:.0%} 的灵感,加上 {:.0%} 的汗水 。'.format(0.01, 0.99)) # 输出百分比,并且不带小数

     

    Processed: 0.008, SQL: 8