公司动态
一篇吃透Python字符串!从入门API到花式操作全指南
前言写Python没人能绕开字符串打印日志、处理文本、接口传参、爬虫解析全靠它。不少新手只会用包一段文字索引、切片、格式化、各类内置方法一团乱找个字符报错、分割字符串乱码、大小写转换写一堆if判断踩坑踩得头大。今天一次性把字符串全套操作捋明白逻辑严谨不遗漏语言轻松不枯燥看完直接收藏当速查手册一、字符串基础什么是字符串简单说被单引号、双引号、三引号包裹的文本内容就是字符串。重中之重字符串是不可变序列这是所有字符串操作的底层核心一定要刻进脑子里字符串一旦创建完成不能直接修改内部任意单个字符不存在原地修改的操作。不管你调用大小写、替换、切片、剔除空白等任何方法都不会改动原始字符串只会生成一段全新字符串作为返回值。s python # 尝试直接修改字符直接报错 # s[0] P # TypeError: str object does not support item assignment # 正确写法接收新返回的字符串 new_s s.capitalize() print(s) # 原字符串不变python print(new_s) # 新字符串Python后续所有内置方法全都遵循这个规则忘记不可变特性很容易写出丢数据的bug。s1 普通双引号字符串 s2 单引号也能用 s3 多行文本直接换行不用转义二、转义字符解决字符串里的“冲突符号”如果文本内部自带引号、换行、制表符、反斜杠直接写会语法报错这时候就要出动转义符\\、\字符串内部输出单/双引号\n换行、\t制表空格\\输出单纯反斜杠不想转义可以用原始字符串rxxx文件路径处理必备# 转义示例 print(我说\Python字符串超好用\) # 原始字符串无视转义 path rC:\user\code\python三、三种字符串格式化按需选用日常拼接字符串别傻傻用硬拼效率低还难读三种格式化按需拿捏% 老式格式化兼容老旧项目适合简单占位str.format()灵活传参、位置匹配、填充对齐f-string推荐简洁直观Python3.6首选name 码农 print(f我是{name}精通字符串操作) print(我是{}精通字符串操作.format(name))四、索引精准定位单个字符字符串是有序序列每个字符自带下标索引从左从0开始从右从-1开始。通过字符串[下标]取出单个字符下标超出范围直接抛索引报错。再次提醒只能读取不能赋值修改字符s hello print(s[0]) # h print(s[-1]) # o五、切片截取一段子串Python字符串神技格式字符串[start:end:step]start起始下标包含默认0end结束下标不包含默认末尾step步长负数实现倒序截取切片超出下标不会报错自动截断边界比索引容错性高一大截。切片只会产出新字符串原文本丝毫不变。s hello world print(s[0:5]) print(s[::-1]) # 字符串反转六、遍历字符串逐个读取字符两种主流遍历方式按需使用for循环直接遍历字符最简写法forrangelen同时拿到下标字符遍历仅读取字符全程无法修改原字符串内容。s python # 只拿字符 for char in s: print(char) # 下标字符 for i in range(len(s)): print(i, s[i])七、字符串核心内置方法大全附踩坑详解全文重点按功能分类整理附带代码演示与避坑要点逻辑清晰不混乱。所有方法统一特性不改变原字符串返回全新字符串/数值/布尔值。7.1 查找字符index/rindex VS find/rfind高频踩坑点两个功能高度相似的工具核心区别只有一句话找不到目标时的处理逻辑index、rindex找到返回下标找不到直接抛出ValueError程序崩溃index从左往右搜rindex从右往左搜find、rfind找到返回下标找不到返回-1程序不会中断find从左往右搜rfind从右往左搜两者都支持传参(目标串, start, end)限定查找区间默认全字符串检索。s hello world # index找不到直接报错稳妥写法先判断in if llo in s: print(s.index(llo)) # find容错性拉满不用额外判断 print(s.find(ll0)) # 不存在返回-1 # 指定查找区间 print(s.find(l, 4, 5)) print(s.rfind(l))7.2 count统计子串出现次数用法字符串.count(子串, start, end)区间内没有匹配内容返回0适合统计关键词出现频次print(hello world.count(l, 4))7.3 大小写转换全家桶五种转换各司其职不用自己写判断替换全部生成新字符串lower()全部转为小写upper()全部转为大写capitalize()整个字符串首字母大写其余全小写title()每个单词首字母大写swapcase()大小写互相反转text heLlo WorlD print(text.lower()) print(text.upper()) print(text.capitalize()) print(text.title()) print(text.swapcase())7.4 文本对齐排版打印专用做控制台表格、格式化输出必备四个对齐方法统一格式方法(总长度, 填充字符)填充字符不传默认空格center(width, fillchar)居中对齐ljust(width, fillchar)左对齐右侧填充rjust(width, fillchar)右对齐左侧填充zfill(width)特殊右对齐左侧自动补0数字字符串格式化神器s hello world print(s.center(20, *)) print(s.ljust(20, *)) print(s.rjust(20, *)) print(s.zfill(20))7.5 判断首尾字符startswith endswith快速判断字符串是否以指定内容开头/结尾返回布尔值True/False文件后缀判断、文本前缀筛选常用text hello world print(text.startswith( )) print(text.endswith( ))7.6 剔除首尾字符strip系列默认剔除首尾空白空格、换行、制表符传参则剔除指定符号原字符串不会被删减需要用变量接收结果strip()左右两边同时剔除lstrip()只剔除左侧rstrip()只剔除右侧print( hello world .strip()) print(hello world.strip()) print(hello world.lstrip()) print(hello world.rstrip())7.7 切割、拼接、替换文本处理三巨头1join序列拼接字符串和split反向操作用指定分隔符把列表、字符串等序列里的元素拼为一整段文本效率远超拼接print(.join(hello)) print( .join([hello, world]))2split切割字符串为列表不传参数默认按所有空白分割传入字符则以该字符切割可额外限制切割次数print(hello world.split()) print(hello world.split(l))3replace批量替换文本参数replace(旧内容, 新内容, 替换次数)指定次数则只替换前N个匹配项不指定全局替换替换结果是新字符串原文本纹丝不动print(hello world hello china.replace(hello, hi, 1))7.8 编码与解码字符串与字节流转换网络传输、文件读写底层都是字节流两套转换规则必须分清encode(编码格式)字符串 → 字节流bytes输出带b标识decode(编码格式)bytes字节流 → 原始字符串编码不匹配直接乱码报错常用编码utf-8、gbk中文Windows环境文件常使用gbk编码# 编码 print(hello world 123 中国.encode(gbk)) # 解码 print(bhello world 123 \xd6\xd0\xb9\xfa.decode(gbk))7.9 is系列判断方法校验文本类型全部返回布尔值表单校验、数据清洗高频使用isalpha()全部由纯字母组成isdigit()全部由纯数字组成isalnum()仅包含字母数字无符号空格islower()所有字母全小写isupper()所有字母全大写istitle()每个单词首字母大写其余小写print(az.isalpha()) print(19.isdigit()) print(19az.isalnum()) print(Az.islower()) print(Az.isupper()) print(Az Bz.istitle())