Python 字符串:文本处理的十八般武艺
目录
前言
前面我们折腾了数字、运算符、循环、时间……但有一个很重要的东西一直没好好聊——字符串。
字符串是啥?就是你看到的所有文字:"你好"、'Python'、"""这是一段话""",统统都是。
你平时写代码,至少有一半时间在跟字符串打交道:打印输出、取用户输入、读文件、拼消息……字符串玩不转,代码写起来就跟不会用筷子的老外吃中餐一样——费劲。
今天这一篇,我们分三个板块把字符串彻底盘一遍:① 字符串的声明与转义、② 索引、遍历与切片、③ 字符串的常用操作方法。
看完之后,字符串在你手里就跟玩魔方一样,想怎么转就怎么转。开始!🧵
一、字符串的声明与转义
1.1 三种声明方式
Python 里声明字符串特别灵活,单引号、双引号、三引号,随便用:
python
# 单引号 s1 = 'hello' # 双引号 s2 = "world" # 三引号(可以换行写) s3 = """这是 一段 多行字符串""" print(s1) # hello print(s2) # world print(s3) # 这是\n一段\n多行字符串
💡 什么时候用哪个? 字符串里有单引号就用双引号包,有双引号就用单引号包,省得转义。比如
"I'm fine"和'他说:"你好"'。
1.2 三引号的特殊用途 —— 文档注释
三引号还有个重要身份:文档注释。放在文件开头、函数里面、类里面,用来写说明文档。
python
"""
这个文件用来处理用户数据的增删改查
作者:糕手
创建时间:2026-07-15
"""
def add_user(name):
"""
添加一个新用户
参数:name —— 用户名
返回:添加成功返回 True,失败返回 False
"""
pass
class User:
"""用户类,封装用户的基本信息"""
pass
这些注释在 IDE 里会显示提示,团队协作时非常有用。
1.3 转义字符 —— 那些需要“特殊处理”的符号
有些字符在字符串里有特殊含义,比如换行、缩进、引号本身。这时候就需要转义字符——前面加个反斜杠 \,让它“变身”。
| 转义符 | 含义 |
|---|---|
\\ | 输出反斜杠本身 |
\' | 输出单引号 |
\" | 输出双引号 |
\n | 换行 |
\t | 制表符(缩进) |
print("你好\n世界") # 你好 换行 世界
print("姓名\t年龄") # 姓名 年龄(中间有个缩进)
print("他说:\"Python 很好学\"") # 他说:"Python 很好学"
print("C:\\Users\\Admin") # C:\Users\Admi
1.4 r"" —— 让转义字符“失效”
如果不想让 \ 起作用(比如文件路径、正则表达式),前面加个 r:
python
path = r"C:\Users\Administrator\Desktop" print(path) # C:\Users\Administrator\Desktop(\ 全部原样输出) # 不加 r 的话,\U 会被当成 Unicode 转义,直接报错
二、索引、遍历与切片
2.1 索引 —— 每个字符都有“门牌号”
字符串里的每个字符都对应一个位置,从 0 开始编号:
python
hero = "王者荣耀亚瑟" # 0 1 2 3 4 5 print(len(hero)) # 6(字符串长度) print(hero[0]) # 王 print(hero[3]) # 荣 print(hero[5]) # 瑟
负数索引:从右往左数,-1 是最后一个:
python
print(hero[-1]) # 瑟 print(hero[-6]) # 王
🎮 打个王者荣耀的比方:索引就是英雄的“铭文页编号”,第 0 页是“王”,第 1 页是“者”,想去哪页就去哪页。
2.2 遍历 —— 把每个字符走一遍
方式一:直接遍历
python
hero = "王者荣耀亚瑟"
for e in hero:
print(e)
输出:
text
王 者 荣 耀 亚 瑟
方式二:通过索引遍历(需要用到长度)
python
for i in range(len(hero)):
print(i, hero[i])
输出:
text
0 王 1 者 2 荣 3 耀 4 亚 5 瑟
2.3 切片 —— 切出你想要的那一段
切片语法:[start:stop:step]
-
start:起始位置(包含) -
stop:结束位置(不包含) -
step:步长(默认为 1)
python
hero = "王者荣耀亚瑟" print(hero[2:]) # 荣耀亚瑟(从索引2到最后) print(hero[:2]) # 王者(从开头到索引1) print(hero[2:4]) # 荣耀(索引2到3) print(hero[2:5:2]) # 荣亚(步长为2,隔一个取一个)
负数步长(倒着取):
python
print(hero[-3:-1]) # 耀亚(从倒数第3到倒数第2) print(hero[4:1:-1]) # 亚耀荣(从4倒着取到2)
2.4 实战:判断一个字符串是否对称
比如检测一个英雄名字是不是“回文”(正着读反着读都一样):
python
# 比如 "貂蝉" 就是对称的,"亚瑟" 也是对称的
# 但 "王者荣耀" 就不是
s = "貂蝉"
for i in range(len(s) // 2):
if s[i] != s[len(s) - 1 - i]:
print(f"字符 {s[i]} 与 {s[len(s)-1-i]} 不一致,不是对称字符串")
break
else:
print(f"'{s}' 是对称字符串!就像貂蝉——正着反着都好看")
输出:
text
'貂蝉' 是对称字符串!就像貂蝉——正着反着都好看
再试一个不对称的:
python
s = "王者荣耀"
for i in range(len(s) // 2):
if s[i] != s[len(s) - 1 - i]:
print(f"字符 '{s[i]}' 与 '{s[len(s)-1-i]}' 不一致,不是对称的")
break
else:
print("是对称字符串")
输出:
text
字符 '王' 与 '耀' 不一致,不是对称的
🎮 王者知识:对称的短名字有“貂蝉”、“亚瑟”、“露娜”,但“妲己”就不对称(妲≠己)。像“王者荣耀”四个字也不对称——王和耀不一样,者和荣也不一样。
第三部分:字符串的常用操作方法
3.1 查找与统计
| 方法 | 作用 | 示例 |
|---|---|---|
index() | 返回子串首次出现的位置,找不到报错 | "hello".index("l") → 2 |
rindex() | 从右侧开始找,找不到报错 | "hello".rindex("l") → 3 |
find() | 返回子串首次出现的位置,找不到返回 -1 | "hello".find("a") → -1 |
rfind() | 从右侧开始找,找不到返回 -1 | "hello".rfind("l") → 3 |
count() | 统计子串出现次数,没有返回 0 | "hello".count("l") → 2 |
python
msg = "王者荣耀亚瑟"
print(msg.index("荣")) # 2
print(msg.rindex("亚")) # 4
print(msg.find("瑟")) # 5
print(msg.find("妲己")) # -1(不报错)
print(msg.count("王")) # 1
3.2 大小写转换(适合英文场景)
| 方法 | 效果 |
|---|---|
lower() | 全部转小写 |
upper() | 全部转大写 |
title() | 每个单词首字母大写 |
capitalize() | 首字母大写,其余小写 |
swapcase() | 大小写互换 |
python
s = "wzry yashe" print(s.lower()) # wzry yashe print(s.upper()) # WZRY YASHE print(s.title()) # Wzry Yashe print(s.capitalize()) # Wzry yashe print(s.swapcase()) # WZRY YASHE(小写变大写,大写变小写)
3.3 对齐方式
| 方法 | 效果 |
|---|---|
center(宽度) | 居中 |
ljust(宽度) | 左对齐 |
rjust(宽度) | 右对齐 |
zfill(宽度) | 右对齐,左边补 0 |
python
s = "亚瑟" print(s.center(10)) # " 亚瑟 " print(s.ljust(10)) # "亚瑟 " print(s.rjust(10)) # " 亚瑟" print(s.zfill(10)) # "00000000亚瑟"
3.4 判断开头/结尾
| 方法 | 作用 |
|---|---|
startswith("xxx") | 是否以 xxx 开头 |
endswith("xxx") | 是否以 xxx 结尾 |
python
hero = "王者荣耀亚瑟"
print(hero.startswith("王者")) # True
print(hero.endswith("亚瑟")) # True
print(hero.startswith("妲己")) # False
3.5 删除指定字符(默认删除空白)
| 方法 | 作用 |
|---|---|
strip() | 删除两端空白 |
lstrip() | 删除左侧空白 |
rstrip() | 删除右侧空白 |
python
s = " 亚瑟 " print(s.strip()) # "亚瑟" print(s.lstrip()) # "亚瑟 " print(s.rstrip()) # " 亚瑟"
3.6 切割与拼接
| 方法 | 作用 |
|---|---|
split("分割符") | 按分割符切分成列表 |
join(列表) | 用指定符号把列表拼成字符串 |
python
# 切割
heroes = "亚瑟,后羿,妲己"
hero_list = heroes.split(",")
print(hero_list) # ['亚瑟', '后羿', '妲己']
# 拼接:用 " | " 把它们拼起来
new_str = " | ".join(hero_list)
print(new_str) # "亚瑟 | 后羿 | 妲己"
3.7 替换
| 方法 | 作用 |
|---|---|
replace(旧, 新) | 把旧字符串替换成新字符串 |
python
s = "我喜欢玩亚瑟"
print(s.replace("亚瑟", "后羿")) # 我喜欢玩后羿
3.8 编码与解码
| 方法 | 作用 |
|---|---|
encode("utf8") | 字符串 → 字节流 |
decode("utf8") | 字节流 → 字符串 |
python
s = "王者荣耀"
# 编码:字符串 → 字节
byte_data = s.encode("utf8")
print(byte_data) # b'\xe7\x8e\x8b...'
# 解码:字节 → 字符串
new_s = byte_data.decode("utf8")
print(new_s) # 王者荣耀
3.9 判断类型(is 系列)
| 方法 | 作用 |
|---|---|
isalnum() | 是否全是字母或数字 |
isalpha() | 是否全是字母 |
isdigit() | 是否全是数字 |
isupper() | 是否全大写 |
islower() | 是否全小写 |
istitle() | 是否每个单词首字母大写 |
python
print("亚瑟123".isalnum()) # True
print("亚瑟".isalpha()) # True
print("2026".isdigit()) # True
print("YASE".isupper()) # True
🎯 字符串方法速查表(收藏用)
| 分类 | 方法 |
|---|---|
| 查找 | index()、rindex()、find()、rfind()、count() |
| 大小写 | lower()、upper()、title()、capitalize()、swapcase() |
| 对齐 | center()、ljust()、rjust()、zfill() |
| 开头结尾 | startswith()、endswith() |
| 去空白 | strip()、lstrip()、rstrip() |
| 切割拼接 | split()、join() |
| 替换 | replace() |
| 编码解码 | encode()、decode() |
| 判断类型 | isalnum()、isalpha()、isdigit()、isupper()、islower()、istitle() |
🧁 结尾
到今天为止,你已经解锁了字符串的全部技能——
-
平A(声明与转义):单引号、双引号、三引号,外加
\n\tr"",常规输出稳如老狗 -
大招(索引与切片):正着数、倒着数、跳着切,精准命中目标字符
-
连招(操作方法):查找、对齐、切割、拼接、替换,一套打完不空技能
你在Python峡谷里,已经是能单排上分的选手了。
字符串玩明白了,后面很多事情就顺了——读取文件、爬网页、拼SQL、清洗数据,全部是基操。你按的每一个字符,最终都会变成你手里的输出。
路虽远,行则将至;代码虽多,敲则必成。
下一期咱们上 列表和元组——批量处理数据,让你从“单杀”进化到“五杀”。🐍🔥
咱们峡谷见~ 👋
更多推荐


所有评论(0)