文章目录:
[1. 字符串的基本操作](#1. 字符串的基本操作)
[1.1 字符串的定义与本质](#1.1 字符串的定义与本质)
[1.2 字符串的创建方式](#1.2 字符串的创建方式)
[1.3 字符串的索引与切片](#1.3 字符串的索引与切片)
[1.4 字符串的拼接与重复](#1.4 字符串的拼接与重复)
[1.5 字符串的成员判断](#1.5 字符串的成员判断)
[1.6 字符串的长度获取](#1.6 字符串的长度获取)
[1.7 字符串的遍历](#1.7 字符串的遍历)
[2. 字符串格式化](#2. 字符串格式化)
[2.1 旧式格式化(% 占位符)](#2.1 旧式格式化(% 占位符))
[2.2 str.format () 格式化](#2.2 str.format () 格式化)
[2.3 f-string 格式化(Python3.6+ 推荐)](#2.3 f-string 格式化(Python3.6+ 推荐))
[2.4 格式化精度控制(数字、日期、对齐)](#2.4 格式化精度控制(数字、日期、对齐))
[3. 字符串常用内置方法](#3. 字符串常用内置方法)
[3.1 大小写转换方法](#3.1 大小写转换方法)
[3.2 查找与替换方法](#3.2 查找与替换方法)
[3.3 分割与连接方法](#3.3 分割与连接方法)
[3.4 去除空白字符方法](#3.4 去除空白字符方法)
[3.5 判断类方法(业务校验核心)](#3.5 判断类方法(业务校验核心))
[3.6 填充与对齐方法](#3.6 填充与对齐方法)
[3.7 编码与解码方法](#3.7 编码与解码方法)
[3.8 其他高频方法](#3.8 其他高频方法)
[4. 字符串项目实战](#4. 字符串项目实战)
[4.1 实战 1:日志解析(运维场景)](#4.1 实战 1:日志解析(运维场景))
[4.2 实战 2:用户信息格式化输出(前后端交互)](#4.2 实战 2:用户信息格式化输出(前后端交互))
[4.3 实战 3:AI 数据预处理(文本清洗)](#4.3 实战 3:AI 数据预处理(文本清洗))
[4.4 实战 4:文件名称规范化(自动化脚本)](#4.4 实战 4:文件名称规范化(自动化脚本))
[4.5 实战 5:敏感词过滤(业务安全)](#4.5 实战 5:敏感词过滤(业务安全))
[5. 总结](#5. 总结)
前言
字符串是 Python 中最常用、最基础、最重要的数据类型,贯穿 Web 开发、数据处理、AI 模型输入输出、自动化运维、日志解析等所有开发场景。无论是前端接口数据解析、后端业务逻辑处理,还是 AI 数据预处理、运维脚本编写,字符串操作都是必备核心技能。
本文从基础操作、格式化、内置方法、项目实战四大维度,全面拆解 Python3 字符串,搭配可运行代码、详细注释、图解说明,让你从入门到精通,彻底搞定字符串!
1. 字符串的基本操作
1.1 字符串的定义与本质
核心定义
字符串(String)是由零个或多个字符组成的不可变有序序列 ,用单引号
' '、双引号" "、三引号''' '''/""" """包裹。
关键特性
- 不可变性 :字符串创建后,无法修改原字符串的单个字符,修改操作会生成新字符串;
- 有序性:字符按顺序存储,支持索引、切片操作;
- 字符集:Python3 默认使用 Unicode 编码,支持中文、英文、符号、 emoji 等所有字符。
底层图解
字符串:"Python3 字符串"
索引: 0 1 2 3 4 5 6 7 8 9
字符: P y t h o n 3 字 符 串
1.2 字符串的创建方式
Python3 支持 5 种字符串创建方式,适配不同场景,代码可直接运行:
python
# 1. 单引号创建:适用于不含单引号的简单字符串
str1 = 'Hello Python'
print("单引号创建:", str1) # 输出:Hello Python
# 2. 双引号创建:适用于字符串内含单引号的场景(无需转义)
str2 = "I'm a Python developer"
print("双引号创建:", str2) # 输出:I'm a Python developer
# 3. 三引号创建:适用于多行字符串、注释、长文本
str3 = '''Python3
字符串
全解教程'''
print("三引号多行字符串:\n", str3)
# 4. str() 函数创建:将其他数据类型转为字符串
num = 123
str4 = str(num)
print("str() 转换:", str4, type(str4)) # 输出:123 <class 'str'>
# 5. 空字符串:业务中常用作初始值
str5 = ''
print("空字符串:", str5, "长度:", len(str5)) # 输出: 长度:0
1.3 字符串的索引与切片
核心概念
- 索引 :通过位置获取单个字符,从左到右从 0 开始 ,从右到左从 -1 开始;
- 切片 :获取字符串的子串,语法:
字符串[起始索引:结束索引:步长],左闭右开(包含起始,不包含结束)。
索引图解
字符串: P y t h o n
正索引: 0 1 2 3 4 5
负索引: -6 -5 -4 -3 -2 -1
切片图解
字符串:"Python123"
切片 [1:6] → 取索引1到5(不包含6)→ "ytho1"
切片 [::2] → 步长2,取所有字符 → "Pto2"
切片 [::-1] → 步长-1,反转字符串 → "321nohtyP"
python
# 定义测试字符串
s = "Python3 字符串实战"
print("原字符串:", s)
# 1. 索引操作:获取单个字符
print("正索引第0个字符:", s[0]) # P
print("正索引第6个字符:", s[6]) # 3
print("负索引第-1个字符:", s[-1]) # 战
print("负索引第-3个字符:", s[-3]) # 字
# 2. 切片操作:获取子串
print("切片[0:6]:", s[0:6]) # Python(左闭右开,取0-5)
print("切片[7:]:", s[7:]) # 字符串实战(从索引7到末尾)
print("切片[:5]:", s[:5]) # Pytho(从开头到索引4)
print("切片[::2]:", s[::2]) # Pto3 字串(步长2,隔1个取1个)
print("切片[::-1]:", s[::-1]) # 战实串符字 3nohtyP(反转字符串)
print("切片[2:-3]:", s[2:-3]) # thon3 字(索引2到倒数第4个)
# 错误演示:索引越界(会报错)
# print(s[100]) # IndexError: string index out of range
1.4 字符串的拼接与重复
核心操作
- 拼接 :用
+连接多个字符串; - 重复 :用
*重复字符串多次。
python
# 1. 字符串拼接(+)
str1 = "Python"
str2 = "字符串"
str3 = str1 + str2
print("字符串拼接:", str3) # Python字符串
# 拼接不同类型:必须先转字符串(否则报错)
num = 3
str4 = str1 + str(num)
print("拼接数字:", str4) # Python3
# 2. 字符串重复(*)
str5 = "Hi~"
print("重复3次:", str5 * 3) # Hi~Hi~Hi~
# 3. 拼接+重复组合
str6 = (str1 + " ") * 2
print("组合操作:", str6) # Python Python
1.5 字符串的成员判断
用关键字 in / not in 判断子串是否存在于字符串中,返回布尔值(True/False),业务中高频使用。
python
s = "Python3 字符串全解"
# 判断子串存在
print("'Python' 在s中:", "Python" in s) # True
print("'Java' 在s中:", "Java" in s) # False
# 判断子串不存在
print("'AI' 不在s中:", "AI" not in s) # True
print("'字符串' 不在s中:", "字符串" not in s) # False
# 实战场景:判断用户输入是否含敏感词
user_input = input("请输入内容:")
if "敏感词" in user_input:
print("输入包含敏感词!")
else:
print("输入合法")
1.6 字符串的长度获取
用内置函数 len() 获取字符串字符个数(中文、英文、符号均算 1 个字符)。
python
# 英文+数字
s1 = "Python123"
print("s1长度:", len(s1)) # 9
# 中文+符号
s2 = "Python3 字符串!"
print("s2长度:", len(s2)) # 11
# 空字符串
s3 = ""
print("s3长度:", len(s3)) # 0
1.7 字符串的遍历
遍历字符串:逐个获取字符串中的每个字符,支持 for 循环(最常用)、while 循环。
python
s = "Python"
# 1. for 循环遍历(推荐)
print("=== for 循环遍历 ===")
for char in s:
print("字符:", char)
# 2. for 循环+索引遍历
print("\n=== for+索引遍历 ===")
for i in range(len(s)):
print(f"索引{i}:字符{s[i]}")
# 3. while 循环遍历
print("\n=== while 循环遍历 ===")
i = 0
while i < len(s):
print(f"索引{i}:字符{s[i]}")
i += 1
2. 字符串格式化
字符串格式化是将变量、数据嵌入字符串 的技术,是开发中输出日志、拼接接口参数、展示数据的核心操作。Python3 支持 3 种格式化方式,f-string 为最优解。
2.1 旧式格式化(% 占位符)
兼容 Python2,语法:"字符串%占位符" % (变量1, 变量2)
常用占位符
%s:字符串%d:整数%f:浮点数%.2f:保留 2 位小数
python
# 单个变量格式化
name = "小明"
print("姓名:%s" % name) # 姓名:小明
# 多个变量格式化
age = 20
height = 1.75
print("姓名:%s,年龄:%d,身高:%.2f" % (name, age, height))
# 输出:姓名:小明,年龄:20,身高:1.75
# 注意:变量数量必须与占位符数量一致
2.2 str.format () 格式化
Python3 早期推荐方式,支持位置参数、关键字参数,灵活性更高。
python
# 1. 位置参数(按顺序匹配)
print("姓名:{},年龄:{}".format("小红", 18)) # 姓名:小红,年龄:18
# 2. 索引参数(指定位置)
print("姓名:{1},年龄:{0}".format(19, "小刚")) # 姓名:小刚,年龄:19
# 3. 关键字参数(无需关心顺序)
print("姓名:{name},年龄:{age}".format(age=21, name="小丽"))
# 4. 精度控制
print("圆周率:{:.2f}".format(3.14159)) # 圆周率:3.14
2.3 f-string 格式化(Python3.6+ 推荐)
语法最简、效率最高、可读性最强 ,直接在字符串中嵌入变量 / 表达式,语法:f"字符串{变量}"。
python
# 基础变量嵌入
name = "AI爱好者"
age = 25
print(f"我是{name},今年{age}岁") # 我是AI爱好者,今年25岁
# 嵌入表达式(直接计算)
a = 10
b = 20
print(f"a+b={a+b}") # a+b=30
# 精度控制
pi = 3.1415926
print(f"圆周率保留2位:{pi:.2f}") # 圆周率保留2位:3.14
# 对齐控制
print(f"姓名:{name:<10}") # 左对齐,占10字符
print(f"姓名:{name:>10}") # 右对齐,占10字符
print(f"姓名:{name:^10}") # 居中对齐,占10字符
# 实战:后端接口数据格式化
user = {"id": 1, "username": "python_dev", "role": "backend"}
print(f"用户ID:{user['id']},用户名:{user['username']},角色:{user['role']}")
2.4 格式化精度控制(数字、日期、对齐)
覆盖开发中数字格式化、日期格式化、对齐展示全场景,适配前端展示、后端日志、报表输出。
python
# 1. 数字格式化
num = 123456.789
print(f"千分位分隔:{num:,}") # 123,456.789
print(f"保留1位小数:{num:.1f}") # 123456.8
print(f"百分比格式:{0.85:.2%}") # 85.00%
# 2. 日期格式化(搭配datetime模块)
from datetime import datetime
now = datetime.now()
print(f"当前时间:{now:%Y-%m-%d %H:%M:%S}") # 2024-05-20 15:30:45
# 3. 补齐格式化(前端展示常用)
print(f"编号:{1:0>3}") # 编号:001(右对齐,补0,占3位)
print(f"编号:{10:0>3}") # 编号:010
3. 字符串常用内置方法
Python3 为字符串提供了超 50 个内置方法 ,覆盖转换、查找、替换、分割、判断、编码 等所有场景,以下是高频必掌握方法,带详细注释 + 可运行代码。
3.1 大小写转换方法
适用于英文文本处理、用户输入标准化、接口参数统一。
python
s = "python3 STRING 字符串"
# 1. 首字母大写
print(s.capitalize()) # Python3 string 字符串
# 2. 全部大写
print(s.upper()) # PYTHON3 STRING 字符串
# 3. 全部小写
print(s.lower()) # python3 string 字符串
# 4. 每个单词首字母大写
print(s.title()) # Python3 String 字符串
# 5. 大小写互换
print(s.swapcase()) # PYTHON3 string 字符串
3.2 查找与替换方法
业务核心:查找子串位置、替换指定内容、统计子串次数。
python
s = "Python3 Python 字符串 Python"
# 1. find():查找子串第一次出现的索引,不存在返回-1
print("find('Python'):", s.find("Python")) # 0
print("find('Java'):", s.find("Java")) # -1
# 2. index():同find,不存在报错
print("index('3'):", s.index("3")) # 6
# 3. rfind():从右往左查找,返回最后一次出现的索引
print("rfind('Python'):", s.rfind("Python"))# 13
# 4. replace():替换子串,参数:(旧串, 新串, 替换次数)
print(s.replace("Python", "Java")) # Java3 Java 字符串 Java
print(s.replace("Python", "Java", 2)) # Java3 Java 字符串 Python
# 5. count():统计子串出现次数
print("count('Python'):", s.count("Python"))# 3
3.3 分割与连接方法
适用于日志解析、数据拆分、列表转字符串(前后端 / 运维高频)。
python
# 1. split():分割字符串,返回列表,默认按空格分割
s1 = "Python 后端 前端 运维 AI"
print("按空格分割:", s1.split()) # ['Python', '后端', '前端', '运维', 'AI']
# 按指定字符分割
s2 = "a,b,c,d,e"
print("按逗号分割:", s2.split(",")) # ['a', 'b', 'c', 'd', 'e']
# 分割指定次数
print("分割2次:", s2.split(",", 2)) # ['a', 'b', 'c,d,e']
# 2. join():连接可迭代对象(列表/元组)为字符串,高频!
list1 = ["Hello", "Python", "字符串"]
print("连接列表:", " ".join(list1)) # Hello Python 字符串
print("用逗号连接:", ",".join(list1)) # Hello,Python,字符串
# 3. splitlines():按换行符分割
s3 = "第一行\n第二行\n第三行"
print("按换行分割:", s3.splitlines()) # ['第一行', '第二行', '第三行']
3.4 去除空白字符方法
处理用户输入、日志数据、文件读取时的空格、换行、制表符,必备方法。
python
s = " Python3 字符串 \t\n"
# 1. strip():去除首尾所有空白(空格、\t、\n)
print("strip():", s.strip()) # Python3 字符串
# 2. lstrip():去除左侧空白
print("lstrip():", s.lstrip())# Python3 字符串
# 3. rstrip():去除右侧空白
print("rstrip():", s.rstrip())# Python3 字符串
# 去除指定字符
s2 = "###Python###"
print("去除#:", s2.strip("#")) # Python
3.5 判断类方法(业务校验核心)
用于用户输入校验、数据合法性判断、字符串类型检测,返回布尔值。
python
# 1. isdigit():判断是否全为数字(支持正整数,不支持小数/负数)
print("12345".isdigit()) # True
print("123a".isdigit()) # False
print("12.3".isdigit()) # False
# 2. isalpha():判断是否全为字母(中文视为字母)
print("Python".isalpha()) # True
print("字符串".isalpha()) # True
print("Python3".isalpha())# False
# 3. isalnum():判断是否为字母+数字(无符号)
print("Python123".isalnum()) # True
print("Python_123".isalnum())# False
# 4. isspace():判断是否全为空白字符
print(" ".isspace()) # True
print(" a ".isspace()) # False
# 5. startswith():判断是否以指定子串开头
print("Python3".startswith("Py")) # True
# 6. endswith():判断是否以指定子串结尾
print("test.py".endswith(".py")) # True
# 实战:用户手机号校验
phone = "13800138000"
if phone.isdigit() and len(phone) == 11:
print("手机号合法")
else:
print("手机号非法")
3.6 填充与对齐方法
适用于前端展示、报表生成、日志格式化,让输出更美观。
python
s = "Python"
# 1. center():居中填充,参数:(总长度, 填充字符)
print(s.center(10, "*")) # **Python**
# 2. ljust():左对齐填充
print(s.ljust(10, "-")) # Python----
# 3. rjust():右对齐填充
print(s.rjust(10, "0")) # 0000Python
# 4. zfill():右侧补0,适用于数字字符串
print("123".zfill(6)) # 000123
3.7 编码与解码方法
网络传输、文件存储、接口交互必备,解决中文乱码问题。
python
s = "Python3 字符串"
# 1. encode():编码 → 字节码(bytes),默认utf-8
bytes_data = s.encode("utf-8")
print("编码后字节:", bytes_data)
# 输出:b'Python3 \xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
# 2. decode():解码 → 字符串,编码格式必须一致
str_data = bytes_data.decode("utf-8")
print("解码后字符串:", str_data) # Python3 字符串
# 解决中文乱码:统一使用utf-8编码
3.8 其他高频方法
python
# 1. zfill():数字字符串补0
print("5".zfill(3)) # 005
# 2. expandtabs():替换制表符为空格(默认8个)
print("Python\t字符串".expandtabs(4)) # Python 字符串
# 3. casefold():比lower()更严格的小写转换(适配特殊字符)
print("PYTHON".casefold()) # python
4. 字符串项目实战
结合后端、前端、运维、AI真实业务场景,用字符串操作解决实际问题,代码可直接部署复用。
4.1 实战 1:日志解析(运维场景)
需求
解析 Nginx 日志字符串,提取访问时间、请求方法、状态码、访问路径。
python
# 原始日志字符串
log = '127.0.0.1 - - [20/May/2024:15:30:45 +0800] "GET /api/user HTTP/1.1" 200 1234'
# 步骤1:分割日志
log_list = log.split()
# 步骤2:提取指定字段
ip = log_list[0]
time = log_list[3][1:-1] # 去除[]
method = log_list[5][1:] # 去除"
path = log_list[6]
status = log_list[8]
# 步骤3:格式化输出
print("=== 日志解析结果 ===")
print(f"访问IP:{ip}")
print(f"访问时间:{time}")
print(f"请求方法:{method}")
print(f"访问路径:{path}")
print(f"状态码:{status}")
4.2 实战 2:用户信息格式化输出(前后端交互)
需求
接收后端返回的用户字典,格式化输出为前端展示的友好格式。
python
# 后端返回的原始数据
user_info = {
"id": 1001,
"username": "python_dev",
"age": 26,
"gender": "male",
"email": "python@test.com",
"role": "后端工程师"
}
# 字符串格式化输出(前端友好展示)
print("="*30)
print(f"用户ID:{user_info['id']}")
print(f"用户名:{user_info['username']}")
print(f"年龄:{user_info['age']} | 性别:{user_info['gender']}")
print(f"邮箱:{user_info['email']}")
print(f"角色:{user_info['role']}")
print("="*30)
4.3 实战 3:AI 数据预处理(文本清洗)
需求
清洗 AI 模型训练的原始文本,去除空白字符、特殊符号、统一大小写。
python
# 原始脏数据
raw_text = " Python3 是 最适合AI的编程语言!!@#$ hello AI \n"
# 1. 去除首尾空白
text1 = raw_text.strip()
# 2. 去除特殊符号
text2 = text1.replace("!", "").replace("@", "").replace("#", "").replace("$", "")
# 3. 统一小写
text3 = text2.lower()
# 4. 去除中间多余空格
text4 = " ".join(text3.split())
print("=== AI文本清洗结果 ===")
print(f"原始数据:{raw_text}")
print(f"清洗后:{text4}")
# 输出:python3 是 最适合ai的编程语言 hello ai
4.4 实战 4:文件名称规范化(自动化脚本)
需求
将不规则文件名统一为小写 + 下划线格式,适配 Linux 系统。
python
# 不规则文件名列表
file_names = ["Python教程.PDF", "AI实战笔记.TXT", "字符串操作.DOC"]
# 规范化处理
new_names = []
for name in file_names:
# 1. 转小写
lower_name = name.lower()
# 2. 替换空格/点为下划线
norm_name = lower_name.replace(".", "_")
new_names.append(norm_name)
print("=== 文件名规范化 ===")
print(f"原名称:{file_names}")
print(f"规范化后:{new_names}")
# 输出:['python教程_pdf', 'ai实战笔记_txt', '字符串操作_doc']
4.5 实战 5:敏感词过滤(业务安全)
需求
过滤用户输入中的敏感词,替换为 ***,保障业务安全。
python
# 敏感词库
sensitive_words = ["敏感词1", "敏感词2", "违规内容"]
# 用户输入
user_input = "我要输入敏感词1和敏感词2,发布违规内容"
# 敏感词过滤
for word in sensitive_words:
user_input = user_input.replace(word, "***")
print("=== 敏感词过滤结果 ===")
print(f"过滤后:{user_input}")
# 输出:我要输入***和***,发布***
5. 总结
本文系统覆盖了 Python3 字符串的所有核心知识点,从基础操作到实战项目,适配全栈开发者、运维、AI 爱好者的需求:
- 基础操作:掌握字符串定义、索引、切片、拼接、遍历,是字符串操作的根基;
- 格式化:优先使用 f-string,高效、简洁、易读;
- 内置方法:50+ 方法中,查找、替换、分割、连接、判断是业务高频操作,必须熟练掌握;
- 项目实战:覆盖运维、前后端、AI 真实场景,代码可直接复用,解决实际开发问题。
字符串是 Python 开发的基石,熟练掌握字符串操作,能大幅提升开发效率,是进阶 Python 核心技能的第一步!
🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近您与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨
