第三章:Python3 之 字符串


文章目录:

前言

[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)是由零个或多个字符组成的不可变有序序列 ,用单引号 ' '、双引号 " "、三引号 ''' '''/""" """ 包裹。

关键特性

  1. 不可变性 :字符串创建后,无法修改原字符串的单个字符,修改操作会生成新字符串;
  2. 有序性:字符按顺序存储,支持索引、切片操作;
  3. 字符集: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 爱好者的需求:

  1. 基础操作:掌握字符串定义、索引、切片、拼接、遍历,是字符串操作的根基;
  2. 格式化:优先使用 f-string,高效、简洁、易读;
  3. 内置方法:50+ 方法中,查找、替换、分割、连接、判断是业务高频操作,必须熟练掌握;
  4. 项目实战:覆盖运维、前后端、AI 真实场景,代码可直接复用,解决实际开发问题。

字符串是 Python 开发的基石,熟练掌握字符串操作,能大幅提升开发效率,是进阶 Python 核心技能的第一步!


🙌 感谢你读到这里!

🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近您与目标的距离。

💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!

💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿

🔔 关注我,不错过下一篇干货!我们下期再见!✨

相关推荐
刘景贤2 小时前
C/C++开发环境
开发语言·c++
威联通网络存储3 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
Dxy12393102163 小时前
Python 根据列表中某字段排序:从基础到进阶
开发语言·windows·python
competes3 小时前
学生需求 交易累计积分,积分兑换奖品
java·大数据·开发语言·人工智能·java-ee
splage3 小时前
Java进阶——IO 流
java·开发语言·python
青桔柠薯片3 小时前
从C语言到裸机运行:i.MX6ULL 的 GPIO 控制与编译链接过程分析
c语言·开发语言·imx6ull
cliffordl3 小时前
设计模式(python)
python·设计模式
OasisPioneer3 小时前
现代 C++ 全栈教程 - Modern-CPP-Full-Stack-Tutorial
开发语言·c++·开源·github
weixin_537590454 小时前
《C程序设计语言》练习答案(练习1-13)
c语言·开发语言·c#