版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符串的定义和切片《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录字符串的定义字符串的元素提取(切片操作)字符串的操作符字符串的定义01字符串的定义字符串是由零个或多个字符组成的有限序列。python里面没有专门用于表示字符的类型,一个字符就是只包含一个元素的字符串。在使用字符串之前,需要先进行字符串定义。由单引号''、双引号""或三引号''''''/""""""包裹是不可变序列(创建后不能修改单个字符)支持Unicode字符(可以包含中文、emoji等)one_str=‘helloone’two_str=“hellotwo”three_str=“““hellothree”””empty=""#长度为0的字符串字符串的声明方式方式示例适用场景单引号'Hello'简单英文文本双引号"Python"包含单引号的文本(如
"I'mOK")三引号'''多行文本'''多行字符串、文档注释转义字符"换行符\\n"处理特殊字符字符串举例:基础示例#单行字符串s1='人工智能's2="Python3.10"s3="I'maprogrammer"#字符串内包含单引号时用双引号包裹#多行字符串s4='''第一行第二行第三行'''#转义字符s5="换行符\\n制表符\\t"字符串举例:殊字符处理#路径中的反斜杠(两种写法)path1="C:\\Users\\Desktop"#转义写法path2=r"C:\Users\Desktop"#原始字符串(rawstring)#包含Unicode和emojis6="中文✓表情😊Unicode字符∑"字符串举例:引号嵌套规则#外层用双引号,内层可用单引号(反之亦然)msg="Hesaid'Hello'"字符串举例:原始字符串#在路径或正则表达式中常用r""避免转义regex=r"\d+"#匹配数字字符串的元素提取(切片操作)02切片操作方式字符串作为序列类型,其元素被顺序放置,可以理解为一个有序的队列。通过索引(下标)的方式进行提取数值,可以通过索引号提取某一个数据元素,也可以通过指定索引(下标)范围获得一组有序的元素,这种访问序列的方式叫做切片。在Python中不仅支持正向索引,同时还支持反向索引。切片操作方式切片操作方式有:1)字符串名[索引值]2)字符串名[开始索引:结束索引:步长]正向索引从0开始,数值从左往右依次递增。反向索引是从右往左开始计算,最右边索引值为-1,然后依次递减。切片操作方式定义变量slice_str,并对其赋值字符串内容“小朋友,你是不是有很多问号?”,其索引表示如图单个字符的提取操作方式:字符串名[索引值]类似其他语言中的数组操作,通过调用字符串中指定元素索引(下标)即可实现字符的提取。正向和反向都可以,正向索引以序列的开始为起点,反向索引以序列的结束为起点。slice_str="小朋友,你是不是有很多问号?"print(slice_str[1])#它的结果为’朋’print(slice_str[-13])#它的结果也为’朋’多个字符的提取操作方式:字符串名[开始索引:结束索引:步长]起始索引:包含该位置字符(默认为0)结束索引:不包含该位置字符(默认为字符串长度)步长:每隔几个字符取一次(默认为1)使用切片方法提取字符串的子串,需要指明开始索引和结束索引所包含区间范围,特别注意开始索引指定的元素包含在切片内,结束索引指定元素不包含在切片中,即区间属于左闭右开[开始索引,结束索引)。执行切片操作时,通常省略步长参数。如果步长为负数,则表示从右往左提取元素。多个字符的提取提取字符串中“朋友”字符串的操作如下slice_str[-13:-11]是从头开始,开始索引数字可以省略;到末尾结束,结束索引数字可以省略,冒号不能省略。slice_str="小朋友,你是不是有很多问号?"print(slice_str[1:3])#基本切片,切片是左闭右开的,输出为’朋友’slice_str[-13:-11]#负索引从字符串的末尾开始计数,输出为’朋友’print(slice_str[:3])#省略起始索引,默认从-开始,输出为“小朋友”print(slice_str[:])#浅复制,输出“小朋友,你是不是有很多问号?”字符串切片的举例:基本切片操作示例结果说明"Python"[1:4]'yth'取索引1到3的字符(不包括4)"Python"[:3]'Pyt'从开头取到索引2(不包括3)"Python"[2:]'thon'从索引2取到末尾"Python"[:]'Python'复制整个字符串s="Python编程"print(s[2:5])#输出:thoprint(s[:4])#输出:Pythprint(s[6:])#输出:编程字符串切片的举例:步长控制s="ABCDEFG"print(s[::2])#输出:ACEGprint(s[1::3])#输出:BEprint(s[::-1])#输出:GFEDCBA示例结果说明"Python"[::2]'Pto'每隔1个字符取1个(步长2)"Python"[1::2]'yhn'从索引1开始,步长2"Python"[::-1]'nohtyP'步长-1实现字符串反转字符串切片的举例:负索引切片#Python支持用负索引表示从末尾开始计数(-1表示最后一个字符)s="HelloWorld"print(s[-5:])#输出:Worldprint(s[2:-3])#输出:lloWo示例结果说明"Python"[-3:]'hon'取最后3个字符"Python"[-5:-2]'yth'从倒数第5到倒数第3(不包括-2)"Python"[3:-1]'ho'混合正负索引字符串切片的举例:切片边界情况s="Python"print(s[10:])#输出:(空字符串)print(s[3:1])#输出:(空字符串)示例结果说明"Python"[100:]''起始索引超限返回空字符串"Python"[:100]'Python'结束索引超限取到末尾"Python"[3:1]''起始>结束返回空字符串字符串切片的举例:综合应用示例text="Python字符串切片技巧"#获取最后两个字符print(text[-2:])#输出:技巧#隔字取字符(步长2)print(text[::2])#输出:Pto字切片巧#反转中文字符串print(text[::-1])#输出:巧技片切串字nohtyP#获取"字符串"子串print(text[6:9])#输出:字符串多个字符的提取:注意事项左闭右开区间:s[1:4]包含索引1,不包含索引4不修改原字符串:切片始终返回新字符串UTF-8字符安全:中英文混合切片时,1个中文占3个索引(Python3中实际按字符数计算)性能考虑:大字符串切片会生成新对象,可能消耗内存字符串的操作符03字符串的操作符
运算符用于执行程序代码运算,会针对一个以上的操作数项目来进行运算。对于字符串的操作运算符主要有+(加法)、*(乘法)、in(成员包含判断)等。操作符类型符号功能描述示例结果拼接+连接两个字符串"Hello"+"World""HelloWorld"重复*重复字符串指定次数"Hi"*3"HiHiHi"成员检查in检查子串是否存在"Py"in"Python"True成员检查notin检查子串是否不存在"Java"notin"Python"True字符串的操作符操作符类型符号功能描述示例结果索引[]获取指定位置的字符"Python"[1]'y'切片[:]获取子串(含步长控制)"Python"[1:4:2]'yh'格式化%旧式字符串格式化"Name:%s"%"Alice""Name:Alice"格式化{}新式字符串格式化(format方法)"{}{}".format("A",1)"A1"格式化f""f-string格式化(Python3.6+)f"{'Python':>10}"'Python'操作符示例:拼接操作符+s1="Hello"s2="Python"print(s1+""+s2)#输出:HelloPython操作符示例:重复操作符*line="-"*30print(line)#输出:操作符示例:成员检查in/notinlang="Python"print("Py"inlang)#输出:Trueprint("Ruby"notinlang)#输出:True操作符示例:索引[]s="Python"print(s[0],s[-1])#输出:Pn(正索引从0开始,负索引从-1开始)操作符示例:切片[:]s="PythonProgramming"print(s[7:18])#输出:Programmingprint(s[::-1])#输出:gnimmargorPnohtyP(反转字符串)操作符示例:格式化操作符%print("PI:%.2f"%3.14159)#输出:PI:3.14print("%s%d"%("Year",2023))#输出:Year2023操作符示例:format方法{}print("{1}{0}".format("World","Hello"))#输出:HelloWorldprint("{:.2%}".format(0.25))#输出:25.00%操作符示例:f-stringf""name="Alice"print(f"Name:{name.upper()}")#输出:Name:ALICEprint(f"{3.1415926:.3f}")#输出:3.142操作符示例:多操作符组合#拼接+重复border="+"+"-"*10+"+"print(border)#输出:++#切片+成员检查s="PythonProgramming"print("Pro"ins[7:])#输出:True操作符示例:格式化对齐#右对齐填充print(f"{'Python':>10}")#输出:'Python'print("{:^10}".format("Hi"))#输出:'Hi'(居中)注意事项#不可变性:所有操作都返回新字符串,原字符串不变s="Hello"s_new=s+"World"#s仍为"Hello",s_new为"HelloWorld"#类型一致性:+操作符要求两边都是字符串print("Num:"+42)#报错!需改为str(42)#中英文混合处理text="中文Python"print(text[2:5])#输出:yth(一个中文占1个索引位置)感谢聆听制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件字符串的处理函数和处理方法制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录字符串的处理函数文本对齐方式大小写转换去除空白字符查找与替换类型判断拆分与连接字符串的处理函数01字符串的处理函数对于字符串的处理,python提供以函数形式的处理的方式,可直接在字符串外部进行调用,常见的有len(x)、str(x)、hex(x)或oct(x)、chr(u)、ord(x)。函数及使用描述len(x)计算长度,返回字符串x的长度len("零壹贰叁肆伍陆柒捌玖")结果为10str(x)强制类型转换,任意类型x所对应的字符串形式str(1.23)结果为"1.23"str([1,2])结果为"[1,2]"hex(x)或oct(x)整数x的十六进制或八进制小写形式字符串hex(425)结果为"0x1a9"oct(425)结果为"0o651"chr(x)x为Unicode编码,返回其对应的字符ord(x)x为字符,返回其对应的Unicode编码举例:len(x)功能:返回字符串(或序列)的长度(字符数)。注意事项:适用于字符串、列表、元组等序列类型。对于多字节字符(如中文或emoji),len会正确统计字符数。s="hello"print(len(s))#输出:5print(len("你好"))#输出:2举例:str(x)功能:将其他类型的数据转换为字符串。注意事项:如果对象定义了__str__方法,str(x)会调用该方法。对None转换会得到"None"。num=42print(str(num))#输出:"42"lst=[1,2,3]print(str(lst))#输出:"[1,2,3]"举例:hex(x)和oct(x)功能:将整数转换为十六进制(hex)或八进制(oct)字符串。注意事项:返回值是字符串类型,带有前缀0x(十六进制)或0o(八进制)。仅支持整数输入,其他类型会报错。n=255print(hex(n))#输出:"0xff"print(oct(n))#输出:"0o377"举例:chr(u)和ord(x)chr(u)功能:返回Unicode码点u对应的字符。ord(x)功能:返回字符x的Unicode码点(整数)。注意事项:chr(u)的u必须是有效的Unicode码点(0到0x10FFFF)。chr(u)的反向操作为ord(x)。ord(x)输入必须是长度为1的字符串,否则会报错。ord(x)不支持直接处理多字符字符串(如ord("abc")会报错)。print(chr(65))#输出:"A"print(chr(128512))#输出:"😀"(emoji)print(ord("A"))#输出:65print(ord("😀"))#输出:128512举例:字符串中字符与编码转换操作被认为全球最公平的游戏之一“剪刀石头布”的字符在计算机中编码分别是9996、9994、9995,代码如下:game_str=input("请输入编码(剪刀9996石头9994布9995):")game_int=int(game_str)print("当前输入编码为:",game_str,"对应字符为:",chr(game_int))请输入编码(剪刀9996石头9994布9995):9996当前输入编码为:9996对应字符为:✌请输入编码(剪刀9996石头9994布9995):9994当前输入编码为:9996对应字符为:✊请输入编码(剪刀9996石头9994布9995):9995当前输入编码为:9996对应字符为:✋文本对齐方式02dir()的示例字符串在处理文本内容时候使用较频繁,其内置的多种方法高效方便供我们进行使用。定义字符串new_str=“hellopython”,通过python内置函数dir()可查看类型所具备的方法和属性。new_str='hello'print(dir(new_str))dir()的示例#输出结果['__add__','__class__','__contains__','__delattr__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__getnewargs__','__gt__','__hash__','__init__','__init_subclass__','__iter__','__le__','__len__','__lt__','__mod__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__rmod__','__rmul__','__setattr__','__sizeof__','__str__','__subclasshook__','capitalize','casefold','center','count','encode','endswith','expandtabs','find','format','format_map','index','isalnum','isalpha','isascii','isdecimal','isdigit','isidentifier','islower','isnumeric','isprintable','isspace','istitle','isupper','join','ljust','lower','lstrip','maketrans','partition','removeprefix','removesuffix','replace','rfind','rindex','rjust','rpartition','rsplit','rstrip','split','splitlines','startswith','strip','swapcase','title','translate','upper','zfill']字符串的处理方法-文本对齐方式字符串可以实现左对齐、右对齐和居中对齐,默认是以空格填充,也可以指定特定的字符。方法说明string.ljust(width[,fillchar])返回一个原字符串左对齐,并使用空格填充至长度width的新字符串。fillchar--填充字符,默认为空格。string.rjust(width[,fillchar])返回一个原字符串右对齐,并使用空格填充至长度width的新字符串string.center(width[,fillchar])返回一个原字符串居中,并使用空格填充至长度width的新字符串字符串的处理方法-文本对齐方式通用注意事项width必须≥原字符串长度,否则返回原字符串。fillchar必须是单字符(如*、-、),否则报错。不会修改原字符串,而是返回新字符串(字符串在Python中是不可变的)。这些方法在格式化输出、表格对齐、日志排版等场景非常有用!方法对齐方式填充方向适用场景ljust(width,fillchar)左对齐右侧填充左对齐文本rjust(width,fillchar)右对齐左侧填充数字对齐center(width,fillchar)居中对齐左右均填充标题居中举例:str.ljust(width[,fillchar])功能:返回一个左对齐的字符串,并使用指定字符(默认为空格)填充至指定宽度。width:最终字符串的总宽度(必须≥原字符串长度,否则返回原字符串)。fillchar(可选):填充字符,默认为空格。注意事项width必须≥原字符串长度,否则返回原字符串。fillchar必须是单字符,否则报错。适用于对齐文本,常用于表格格式化输出。s="hello"print(s.ljust(10))#输出:"hello"(默认用空格填充)print(s.ljust(10,'-'))#输出:"hello"print(s.ljust(3,'*'))#输出:"hello"(width<原长度,不填充)范例:字符串文本位置对齐操作文本对齐操作是字符串常用操作,在Python中如果要对字符串生成报表打印格式,使用以上字符串文本对齐方式的操作,会有很大的便利性。比如使用以下代码可生漂亮的报表格式。print('姓名'.center(10,"-"),'性别'.center(10,"-"),'学号'.center(10,"-"))#居中对齐,“-”占位print('理工蓝'.center(10),'男'.center(10),'190101001'.center(10))#居中对齐print('可爱红'.center(10),'女'.center(10),'190101001'.center(10))#居中对齐print("总计:2人".rjust(30))#右对齐,占位30字符#输出结果姓名
性别
学号
理工蓝男190101001
可爱红女190101001
总计:2人大小写转换03字符串的处理方法-大小写转换字符串通过调用大小写转换方法,能够实现字符大写和小写之间的变换,可适应不同场景的应用,比如专有名词大写、特定商标等。方法说明string.capitalize()把字符串的第一个字符大写string.title()把字符串的每个单词首字母大写string.lower()转换string中所有大写字符为小写string.upper()转换string中的小写字母为大写string.swapcase()翻转string中的大小写举例中国是瓷器的故乡,瓷器是古代劳动人民的一个重要的创造,也是中华民族的艺术瑰宝。在英文中,经常看到用英文字母china表示中国和瓷器。当首字母大写时,China表示“中国”;当首字母小写时,china表示“瓷器”。str_up_lower="welCOMEtochina"print(str_up_lower.capitalize())print(str_up_lower.title())print(str_up_lower.lower())print(str_up_lower.upper())print(str_up_lower.swapcase())#结果如下WelcometochinaWelcomeToChinawelcometochinaWELCOMETOCHINAWELcomeTOCHINA大小写转换:注意事项方法功能示例输入→输出注意事项capitalize()首字母大写,其余小写"hElLo"
→
"Hello"仅首字母受影响title()每个单词首字母大写"helloworld"
→
"HelloWorld"单词边界可能不完美lower()全转小写"HeLLo"
→
"hello"对非字母无影响upper()全转大写"HeLLo"
→
"HELLO"适用于大小写无关比较swapcase()大小写互换"HelloPYTHON"
→
"hELLOpython"非字母字符不变去除空白字符04字符串的处理方法-去除空白字符字符串的定义相对灵活,对于包含空白字符的字符串可以使用调用去除空白字符方法进行处理。字符串去除空白字符可用在用户输入数据处理方面,对肉眼看不见的空白字符进行过滤,保证数据的准确性。此方法主要是处理字符串两端的空白字符。空白字符包括:空格、制表符\t、换行符\n、回车符\r等。方法说明string.lstrip()截掉string左边(开始)的空白字符string.rstrip()截掉string右边(末尾)的空白字符string.strip()截掉string左右两边的空白字符举例总是会遇到一些“天马行空”的用户输入数据,它们可能有程序不需要的空白字符。在进行数据处理前需要对数据进行清洗工作,去除空白字符可以作为第一步的处理。data=input("输入用户名:")print(data)#键盘输入用户名,前后有3个空格print(data.lstrip())#去除字符串左侧空白字符print(data.rstrip())#去除字符串右侧空白字符print(data.strip())#去除字符串两侧空白字符#结果如下输入用户名:tomtomtomtomtom查找与替换05字符串的处理方法-查找与替换字符串中查找和替换是日常开发中极为高频的基础操作。熟练掌握这些方法,能够帮助我们快速定位关键信息、批量更新文本内容,从而大幅提升数据清洗、文本解析等场景下的代码执行效率与开发体验。开头/结尾判断startswith(str)判断字符串是否以指定子串开头,匹配成功返回布尔值True,常用于数据格式校验与分类筛选。endswith(str)判断字符串是否以指定子串结束,常用于文件后缀名识别、数据记录的结尾标识判断。查找子串位置find()/rfind()从左/右查找子串首次出现的索引,若不存在则返回-1,是处理不确定数据时的安全查找方式。index()/rindex()功能与find类似,但在子串不存在时会抛出ValueError异常,适用于必须存在目标的场景。替换子串内容replace(old,new,num)将字符串中的旧子串替换为新子串。可选参数num用于限制最大替换次数,默认替换所有匹配项。注意:该方法返回的是一个新字符串,原始字符串不会被修改,这符合Python中字符串不可变的特性。举例:string.startswith(str)作用:检查字符串是否以指定子字符串开头,返回布尔值。应用场景:检查文件是否以特定前缀开头。filename="report_2023.pdf"is_report=filename.startswith("report")#Trueis_invoice=filename.startswith("invoice")#False举例:string.endswith(str)作用:检查字符串是否以指定子字符串结尾,返回布尔值。应用场景:验证文件扩展名。filename="document.docx"is_word=filename.endswith(".docx")#Trueis_pdf=filename.endswith(".pdf")#False举例:string.find(str,start=0,end=len(string))作用:查找子字符串首次出现的位置,找不到返回-1。应用场景:在日志中查找特定错误代码的位置。log="ERROR404:Pagenotfound.ERROR500:Servererror"error_pos=log.find("ERROR500")#返回25not_found_pos=log.find("ERROR301")#返回-1举例:string.rfind(str,start=0,end=len(string))作用:查找子字符串最后一次出现的位置,找不到返回-1。应用场景:获取URL中最后一个斜杠的位置。url="/products/item123"last_slash_pos=url.rfind("/")#返回31举例:string.index(str,start=0,end=len(string))作用:类似find(),但如果找不到会引发ValueError异常。应用场景:确保必须存在的关键词位置(当确定存在时使用)。sentence="Thequickbrownfoxjumpsoverthelazydog"fox_pos=sentence.index("fox")#返回16#如果使用不存在的词会报错:sentence.index("cat")#ValueError举例:string.replace()string.replace(old_str,new_str,num=string.count(old))作用:替换字符串中的子字符串,可指定替换次数。应用场景:敏感信息脱敏处理。credit_card="1234-5678-9012-3456"masked_card=credit_card.replace("1234","****")#"****-5678-9012-3456"phone="555-123-4567"partial_mask=phone.replace("-","",1)#"555123-4567"(只替换第一个横线)举例:查找古诗词txt_str="白云深处有人家"print(txt_str.startswith("白云"))#先检查是否“白云”为开头print(txt_str.find("深"))#检测“深”字是否包含于字符串,并返回下标值print(txt_str.replace("深","生"))#将“深”替换为“生”#结果如下True2白云生处有人家举例:文件路径处理filepath="/documents/report_final.pdf"#1.检查是否是PDF文件is_pdf=filepath.endswith(".pdf")#True#2.查找文件名(最后一个/后的部分)last_slash_pos=filepath.rfind("/")#10filename=filepath[last_slash_pos+1:]#"report_final.pdf"#3.替换文件名(保持路径不变)new_filepath=filepath.replace("final","draft")#"/documents/report_draft.pdf"举例:日志分析log="[ERROR]Diskfullat12:30\n[WARNING]HighCPUat12:35\n[ERROR]Networktimeoutat12:40"#1.检查日志是否包含ERRORhas_error=log.startswith("[ERROR]")#False(因为第一行不是ERROR?不,实际是整个字符串的开头)#2.查找第一个ERROR的位置first_error_pos=log.find("[ERROR]")#0(因为第一个字符就是[ERROR])#3.查找最后一个ERROR的位置last_error_pos=log.rfind("[ERROR]")#43(第二个ERROR的位置)#4.提取最后一个ERROR的信息error_log=log[last_error_pos:]#"[ERROR]Networktimeoutat12:40"举例:数据清洗(脱敏处理)credit_card="Card:1234-5678-9012-3456"phone_number="Phone:+1(555)123-4567“#1.检查是否是Visa卡(假设4开头)is_visa=credit_card.startswith("Card:4")#False(因为开头是"Card:1")#2.找到信用卡号的起始位置card_num_start=credit_card.find("1234")#7#3.替换部分卡号(只替换前12位,保留最后4位)masked_card=credit_card.replace("1234-5678-9012","****-****-****")#"Card:****-****-****-3456"#4.隐藏手机号(只替换数字部分)masked_phone=phone_number.replace("123-4567","***-****")#"Phone:+1(555)***-****"查找与替换:注意事项方法作用返回值找不到时的行为主要应用场景注意事项startswith(str)检查字符串是否以指定子串开头布尔值(True/False)返回False1.检查文件前缀
2.协议验证(如http://)区分大小写,可指定起始和结束位置endswith(str)检查字符串是否以指定子串结尾布尔值(True/False)返回False1.文件扩展名验证
2.URL后缀检查可接受元组作为参数来检查多个可能后缀find(str)查找子串首次出现位置索引位置(从0开始)返回-11.日志关键词定位
2.数据提取比index()更安全,推荐优先使用查找与替换:注意事项方法作用返回值找不到时的行为主要应用场景注意事项rfind(str)查找子串最后一次出现位置索引位置(从0开始)返回-11.获取文件扩展名位置
2.路径解析从右向左查找但返回的索引仍是正序index(str)查找子串首次出现位置索引位置(从0开始)抛出ValueError1.必须存在的关键词定位使用前最好先用in操作符检查是否存在rindex(str)查找子串最后一次出现位置索引位置(从0开始)抛出ValueError1.必须存在的后缀定位性能略优于rfind()但不够安全replace(old,new)替换字符串中的子串新字符串无(原样返回)1.数据脱敏
2.格式标准化创建新字符串而非修改原字符串类型判断06字符串的处理方法-类型判断字符串自带的类型判断方法是Python中处理文本数据的核心工具。通过返回布尔值(True/False),我们可以快速识别字符串的构成特征(如是否全为数字、字母或特定格式),这在用户输入验证、数据清洗以及程序逻辑流的条件分支判断中有着广泛且重要的应用。判断字符类型string.isspace()若字符串中只包含空格、制表符等空白字符且非空,则返回True。string.isalnum()至少含一个字符,且所有字符都是字母或数字时返回True。string.isalpha()至少含一个字符,且全为字母(a-z,A-Z)时返回True。判断数字类型string.isdecimal()严格匹配十进制阿拉伯数字字符,是处理金额、序列号等精确数值场景的首选判断方法。string.isdigit()包含数字字符,包括全角数字、Unicode特殊数字符号。string.isnumeric()支持所有数值含义的字符,如汉字数字“五”、罗马数字等。判断格式与大小写string.istitle()字符串为标题化格式时返回True,常用于规范化文档标题。string.islower()所有可区分大小写的字符均为小写字母时返回True。string.isupper()所有可区分大小写的字符均为大写字母时返回True。举例:判断字符串类型操作txt_str=input("请输入用户密码:")print(txt_str.isdigit())#判断是否只包含数字print(txt_str.isalnum())#判断是否只包含字母和数字print(txt_str.isalpha())#判断是否只包含字母print(txt_str.isspace())#判断是否包含空格#结果如下请输入用户密码:hello123FalseTrueFalseFalse举例:用户注册表单验证#用户输入验证username="User123"password="SecurePwd2023"email="user@"#检查用户名是否只包含字母和数字print(username.isalnum())#True-允许字母数字组合print(username.isalpha())#False-不纯字母#检查密码强度print(password.islower())#False-不全小写print(password.isupper())#False-不全大写print(any(c.isdigit()forcinpassword))#True-包含数字(虽然用了any,但重点展示isdigit)#检查标题格式(如姓名)full_name="JohnDoe"print(full_name.istitle())#True-每个单词首字母大写举例:文本分析与格式化检查#文章标题和段落分析title="TheArtofPythonProgramming"paragraph="pythonisaversatilelanguage.it'susedforwebdevelopment,dataanalysis,andmore."#检查标题格式print(title.istitle())#True-符合标题格式(每个单词首字母大写)#检查段落格式first_sentence=paragraph.split(".")[0]print(first_sentence.islower())#True-全小写(可能需首字母大写)#检查字符串是否全字母pure_word="Python"print(pure_word.isalpha())#True-纯字母#检查数值字符串numeric_str="²3455"#包含上标数字print(numeric_str.isdigit())#Trueprint(numeric_str.isdecimal())#False拆分与连接07字符串的处理方法-拆分与连接字符串的拆分与连接是Python文本处理中至关重要的基础方法。根据业务场景的不同,通过拆分可将长文本拆解为更小的单元以提取信息,通过连接则能将零散片段重组为新的字符串对象,二者配合构成了灵活处理文本数据的核心能力。拆分方法(Splitting)partition(str)将字符串切分为固定3元组:(分隔符前内容,分隔符,分隔符后内容),实现精准分割。rpartition(str)从字符串右侧逆向查找分隔符,同样返回3元组,适用于处理末尾有特定标识的文本。split(sep,maxsplit)按指定分隔符拆分,可限制拆分次数,默认按空白符分割,是最通用的拆分手段。splitlines()智能识别换行符进行分行,保留原始文本的行结构,常用于日志或文档解析。连接方法(Joining)string.join(sequence)以调用者自身作为分隔符,将序列(如列表、元组)中的所有元素(自动转为字符串)串联成一个全新的字符串。它是Python中最高效的批量文本拼接方式,避免了循环中使用`+`带来的性能损耗。核心思维:拆分是“化整为零”提取有效信息,连接是“聚零为整”重组业务数据,二者结合是解决复杂文本清洗、格式转换任务的黄金搭档。举例:拆分与连接英语单词txt_str="FIFAWorldCup"split_str=txt_str.split()#使用string.split()方法将字符串进行拆分,默认使用空格作拆分符print(split_str)print("❤".join(split_str))#使用红心作为连接字符,拼接成新的字符串#结果如下:['FIFA','World','Cup']FIFA❤World❤Cup举例:文件路径处理#1.文件路径分割filepath="/home/user/documents/report.pdf"#使用partition分离目录和文件名drive,sep,filename=filepath.rpartition('/')print(f"目录部分:{drive}")#输出:/home/user/documentsprint(f"分隔符:{sep}")#输出:/print(f"文件名:{filename}")#输出:report.pdf#使用split获取所有路径组成部分path_parts=filepath.split('/')print(f"路径组成部分:{path_parts}")#输出:['','home','user','documents','report.pdf']举例:文件与日志分析#2.日志信息处理log_entry="ERROR|2023-08-15|14:30:22|Diskfull|/dev/sda1"#使用partition分离日志级别和其他信息log_level,sep,log_details=log_entry.partition('|')print(f"日志级别:{log_level}")#输出:ERRORprint(f"日志详情:{log_details}")#输出:2023-08-15|14:30:22|Diskfull|/dev/sda1#使用split分割所有日志字段log_fields=log_details.split('|',2)#最多分割2次print(f"日志字段:{log_fields}")#输出:['2023-08-15','14:30:22','Diskfull|/dev/sda1']举例:文件路径与日志分析的方法应用说明方法应用说明:partition()/rpartition():将字符串分成三部分(前部|分隔符|后部),适合已知分隔符且只需分割一次的场景split():按指定分隔符分割字符串,可控制分割次数,适合需要获取所有部分的场景举例:多行文本处理#1.多行文本处理multiline_text="""第一行第二行第三行"""#使用splitlines分割多行文本lines=multiline_text.splitlines()print(f"文本行数:{len(lines)}")#输出:3print(f"第二行内容:{lines[1]}")#输出:第二行举例:数据重组(1)#2.数据重组data_fields=['John','Doe','30','NewYork’]#使用join将列表合并为CSV格式csv_line=','.join(data_fields)print(f"CSV格式:{csv_line}")#输出:John,Doe,30,NewYork举例:数据重组(2)#使用join创建SQL查询条件conditions=["name='John'","age>25","city='NewYork'"]sql_where="AND".join(conditions)print(f"SQL条件:{sql_where}")#输出:name='John'ANDage>25ANDcity='NewYork’#使用split和join进行字符串转换dashed_date="2023-08-15"dot_date=".".join(dashed_date.split('-'))print(f"点分隔日期:{dot_date}")#输出:2023.08.15举例:多行文本处理与数据重组的方法应用说明方法应用说明:splitlines():按行分割文本,自动处理不同操作系统换行符(\n,\r\n等)join():将序列中的字符串用指定分隔符连接,常用于生成格式化的字符串(CSV、SQL等)split()+join()组合:实现字符串分隔符转换拆分与连接:注意事项方法注意事项返回值适用场景partition(str)从左开始分割,只分一次(前段,分隔符,后段)提取已知分隔符前后的内容rpartition(str)从右开始分割,只分一次(前段,分隔符,后段)提取最后出现分隔符前后的内容split(str,num)全部分割,可控制次数分割后的列表需要所有分割部分时使用splitlines()按行分割行列表处理多行文本join(seq)连接字符串序列合并后的字符串生成格式化字符串(CSV、SQL等)感谢聆听制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件字符串的转义、编码和格式化制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录字符串的转义字符字符串的编码字符串的格式化处理字符串的转义字符01字符串的转义字符字符串的表示中,有一些字符与反斜杠’\’结合就具有不同的含义,比如说打印换行符\n和回车符\r,为了能够正确输出所需字符,这个时候就需要使用转义字符进行表示。转义字符描述\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格(Backspace)\e转义\000空\n换行\v纵向制表符\t横向制表符\r回车\f换页举例:字符串中字符与编码转换操作如果想在字符串中使用单引号,可以在字符串外面使用双引号表示即可,但如果字符串外面使用的也是单引号,那该如何书写呢?print("it'sagoodday")#外层双引号,内层单引号,可正常输出#下面代码外层和内层都是单引号,编译器会提示错误SyntaxError:invalidsyntax#print('it'sagoodday')print('it\'sagoodday')#使用转义字符\print(r'it\'sagoodday')#加上r引导#结题如下it'sagooddayit'sagooddayit\'sagoodday举例:不可见字符与特殊符号\n实现换行\t插入制表符(通常4或8个空格)\\表示真正的反斜杠\"在双引号字符串中表示双引号本身print("第一行文本\n第二行文本\t制表符\\反斜杠\"双引号")#输出第一行文本第二行文本制表符\反斜杠"双引号举例:ASCII/Unicode编码\101是八进制表示的ASCII字符'A'(65的八进制是101)\x41是十六进制表示的ASCII字符'A'(65的十六进制是41)\u4F60\u597D是Unicode表示的"你好"print("八进制\101代表'A',十六进制\x41也是'A'\nUnicode字符\u4F60\u597D是'你好’”)#结果如下八进制A代表'A',十六进制A也是'A'Unicode字符你好是'你好'字符串的编码02字符串的编码计算机世界有多种语言,每种语言拥有自己的编码方式,就像不同国家都有自己的语言一样,如果想要顺畅交流,就需要有统一的交流语言。UTF-8-->decode解码-->UnicodeUnicode-->encode编码-->GBK/UTF-8常用编码格式UTF-8:最常用的Unicode编码,兼容ASCIIGBK:中文编码标准ASCII:仅支持英文字符Latin-1:ISO-8859-1编码编码encode()语法作用:将Unicode字符串编码为指定编码的bytes对象它的参数说明如下:encoding:要使用的编码,如UTF-8、base64和GBK等。errors:设置不同错误的处理方案。默认为'strict',意为编码错误引起一个UnicodeError。其他可能得值有'ignore','replace','xmlcharrefreplace','backslashreplace'以及通过codecs.register_error()注册的任何值。str.encode(encoding='UTF-8',errors='strict')解码decode()语法作用:将bytes对象解码为Unicode字符串它的参数说明与编码encode()语法类似。str.dncode(encoding='UTF-8',errors='strict')举例:encode()方法text="你好世界"encoded=text.encode('utf-8’)#b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'print(encoded)gbk_encoded=text.encode('gbk')#b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7'print(gbk_encoded)举例:decode()方法byte_data=b'\xe4\xbd\xa0\xe5\xa5\xbd'decoded=byte_data.decode('utf-8')#"你好"print(decoded)举例:基本编码解码#编码过程original="Python编程"utf8_bytes=original.encode()#默认UTF-8gbk_bytes=original.encode('gbk')#解码过程decoded_utf8=utf8_bytes.decode('utf-8')decoded_gbk=gbk_bytes.decode('gbk')print(decoded_utf8==decoded_gbk)#True范例:字符串编码和解码str="Python编程";#定义一个字符串print("默认字符串:",str)print("UTF-8编码:",str.encode("UTF-8"))#编码为UTF-8print("GBK编码:",str.encode("GBK"))#编码为GBKprint("UTF-8解码:",str_utf8.decode('UTF-8','strict'))#解码为UTF-8print("GBK解码:",str_gbk.decode('GBK','strict'))#解码为GBK#结果如下默认字符串:Python编程UTF-8编码:b'Python\xe7\xbc\x96\xe7\xa8\x8b'GBK编码:b'Python\xb1\xe0\xb3\xcc'UTF-8解码:Python编程GBK解码:Python编程字符串的格式化处理03字符串的格式化处理字符串格式化是为了让字符输出有统一规范的格式,常用的格式化方式有%-formatting和str.format()两种方式,在Python3.6版本后,字符串格式化新增f-strings方式,易读性和效率也更高。%-formatting方式str.format()方式f-strings方式字符串的格式化处理-%-formatting方式百分号占位符(%-formatting)方式在Python2.x中用的比较广泛,使用%进行占位要注意,当%的左右均为数字的时候,表示求余数的操作;但%出现在字符串中的时候,表示格式化操作符。符号描述%c
格式化字符及其ASCII码%s
格式化字符串%d
格式化十进制整数%u
格式化无符号整型%o
格式化无符号八进制数%x
格式化无符号十六进制数%X
格式化无符号十六进制数(大写)%f
格式化浮点数字,可指定小数点后的精度%e
用科学计数法格式化浮点数%E
作用同%e,用科学计数法格式化浮点数%%
输出%字符串的格式化处理-str.format()方式str.format()方式对%-formatting进行改进,统一使用大括号{}进行标记替换字段,采用函数调用的语法,通过位置参数和关键字参数进行格式化输出。用法一:位置映射按参数传入顺序自动填充,或显式指定索引`{0}`,`{1}`。参数可重复调用,无需重复传值,适合参数顺序固定的场景。用法二:关键字映射使用有意义的变量名作为占位符(如{product}),参数含义一目了然。打破参数顺序限制,是处理复杂业务数据的首选。用法三:混合参数结合位置与关键字的灵活性,但必须遵循“位置参数在前,关键字参数在后”的核心语法规则,否则会触发语法错误。format()函数format()函数是Python中一个非常强大且灵活的字符串格式化方法,它允许以更可读和简洁的方式插入变量到字符串中,替代传统的百分号(%)格式化或str.format()方法。format()函数的基本用法是在字符串中用大括号{}标记占位符,然后通过传递参数来填充这些占位符。#语法formatted_string="模板字符串".format(值1,值2,...)#或使用命名参数:formatted_string="模板字符串".format(name1=值1,name2=值2,...)format()函数的举例——按顺序插入值print("{}is{}".format("Python","awesome"))#输出:Pythonisawesomeformat()函数的举例——按索引重复使用值print("{0}{1}!{0}rocks!".format("Hello","World"))#输出:HelloWorld!Hellorocks!format()函数的举例——按命名参数print("{name}is{age}yearsold".format(name="Alice",age=25))#输出:Aliceis25yearsoldformat()函数的举例——综合示例name="python"city="东莞"#使用位置参数print("我的名字是{},我来自{}".format(name,city))#使用关键字参数print("我的名字是{name},我来自{city}".format(name=name,city=city))format()函数——格式说明符在{}中使用冒号:指定格式,例如::d整数:f浮点数:.2f保留两位小数:s字符串:^居中对齐:<左对齐:>右对齐format()函数——格式说明符#数字格式化print("PI:{:.2f}".format(3.1415926))#输出:PI:3.14#对齐和填充print("{:^10}".format("Hi"))#输出:Hi(居中对齐,宽度10)print("{:<10}".format("Hi"))#输出:Hi(左对齐)print("{:>10}".format("Hi"))#输出:Hi(右对齐)#千位分隔符print("{:,}".format(1000000))#输出:1,000,000format()函数的举例——数字和字符串混合输出print("{}costs${:.2f}".format("Apple",2.99))#输出:Applecosts$2.99format()函数的举例——百分比格式print("{:.1%}".format(0.85))#输出:85.0%f-stringf-string是Python3.6及更高版本中引入的一种新的字符串格式化方法。它以字母f或F开头,并在字符串内部使用大括号{}包围表达式,这些表达式将在运行时求值,并将其结果插入到字符串的相应位置。name="python"city="东莞"print(f"我的名字是{name},我来自{city}。")#输出结果与上面一样#f-string还支持更复杂的表达式和函数调用x=5y=10print(f"两个数加法运算{x}+{y}等于{x+y}")f-string举例——直接嵌入变量name
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年法律硕士联考专业基础试题及答案
- 2026年安全工程师《安全生产法律法规》试题及答案
- 某家电厂市场推广制度
- 某纺织厂员工培训规范
- 旅游相关知识笔试题目及答案(完整版)
- 2026年宁夏中卫中小学教师招聘考试真题及完整答案解析
- 小学一年级数学《9加几:凑十法的秘密》教案
- 仁爱科普版八年级英语上册Unit1 My Dream Job Wrapping up the Topic 项目式复习教学设计
- 幼儿园大班科学活动《斜坡上的小车》教学设计
- 初中美术七年级上册《校园空间美学》知识清单
- 期末评估测试卷(含答案)2025-2026学年地理人教版八年级下册
- ICU环境下严重颅脑创伤亚低温治疗的监护策略
- 建筑拆除工程监理实施细则
- 5年(2021-2025)重庆中考物理真题分类汇编:专题09 浮力(原卷版)
- 调酒基础知识培训总结
- 2025年公安院校联考公安院校联考行测题库(附答案)
- 知道智慧树项目管理与工程经济决策满分测试答案
- 生态旅游监测体系构建-洞察及研究
- JJF 2225-2025 高绝缘电阻测量仪(高阻计)校准规范
- JG/T 158-2013胶粉聚苯颗粒外墙外保温系统材料
- 房屋提前交付协议书
评论
0/150
提交评论