本篇是《Python 从入门到初级》第 3 / 20 篇。示例使用 Python 3.12 兼容语法,完整目录结构与数据见配套源码包。
用户填写的名称可能带空格,CSV 中的标签可能挤在同一列,日志中又需要把多个字段拼成一行。Python 字符串操作可以完成这些常见的文本整理。

1. 先把文字当作有顺序的字符序列
字符串用引号包围,支持索引和切片。text[0] 取第一个字符,text[-1] 取最后一个,text[:2] 取前两个。切片通常包含左边界、不包含右边界。
索引从 0 开始是初学时最容易弄错的地方。长度为 3 的字符串,普通正索引是 0、1、2,取 [3] 会越界。
多行文字可以使用三引号。需要在文字里换行可以写 \n;反斜杠是转义机制的一部分,不一定代表路径分隔符。处理真实路径时,第 10 篇会使用 pathlib。
2. 完整示例:清洗名称和展示邮箱
保存为 lesson03.py:
raw_name = " Alice "
name = raw_name.strip().lower()
email = "alice@example.test"
username, domain = email.split("@", 1)
masked = username[:2] + "***@" + domain
tags = "python, linux, python"
words = tags.replace(" ", "").split(",")
print("标准化用户名:", name)
print("邮箱展示:", masked)
print("拆分后的标签:", words)
print("重新连接:", " / ".join(words))
print("原始字符串没有改变:", repr(raw_name))
运行后,标准化用户名为 alice,邮箱展示为 al***@example.test,标签列表为 ['python', 'linux', 'python']。重新连接后得到 python / linux / python。
这里的邮箱处理只是展示遮挡,不是匿名化方案,也没有验证邮箱是否合法。标签里的重复项暂时保留,第 5 篇再用集合处理。
3. 每个常用方法在做什么
| 写法 | 含义 | 易误解的地方 |
|---|---|---|
strip() |
去掉两端的空白 | 不会删除中间全部空格 |
lower() |
按规则转小写 | 不等于处理所有语言的业务同一性 |
split("@", 1) |
最多拆一次 | 返回列表,可把两项分别赋值 |
replace(" ", "") |
替换普通空格 | 不等于删除一切空白字符 |
" / ".join(words) |
用分隔符连接字符串项 | 列表里需要是字符串 |
这些方法的定义可查 字符串方法文档。先根据数据约定选择操作,不要为了“干净”把具有业务意义的空格也删掉。
4. 字符串不会被原地修改
raw_name.strip() 返回新字符串,原来的 raw_name 没有改变。如果需要保留处理结果,就像示例一样赋给 name。
因此下面的写法只调用方法,却没有更新变量:
text = " hello "
text.strip()
print(repr(text))
预期仍显示两端空格。repr() 适合检查空格、换行等不容易直接看出的字符。
想更新名字可以写 text = text.strip()。这是重新赋值,不是把原字符串内部改掉。
5. 什么时候普通字符串方法就够用
文件名是否以 .csv 结束,可以用 endswith();一行中是否包含关键词,可以用 in;固定分隔符的数据,可以先考虑 split()。
但 CSV 允许字段内出现带引号的逗号,不能简单用 split(",") 解析真实 CSV。第 11 篇会使用 csv 模块。更复杂的格式匹配可以再学正则,不需要一上来就用正则处理一切文本。
6. 常见错误和练习
"数量=" + 3 会因为类型不同而失败。可以使用 f-string,或者明确转换为 str(3)。
" ".join([1, 2]) 同样不能自动拼接数字。先决定想要怎样展示,再把每项变成字符串。
练习:把 " Python; Linux; CSV " 整理成 python / linux / csv。先去掉两端空白、按分号拆分,再分别清理各项。当前还没学循环时,可以先对固定三项手动处理;学完第 7 篇后,再把它改成能处理任意数量的版本。