订单表单送来的名字是「 MAYA chen 」,后面还挂着一个换行,因为客人怎么说话就怎么打字。查价之前,这段文字得先洗干净,又不能把原件弄坏。哪些方法会返回新字符串,又该怎么留住原来的值?
真实世界里的文本往往很乱:多余空格、大小写不一致,多个字段挤在一个字符串里。字符串方法会返回新的字符串或列表,让你搭建一条清晰的文本清理流程,同时不改变原值。 你还会规范化一组杂乱输入,并在检查后解包一条记录。
先清理两端
strip() 会去掉字符串两端的空白。lower() 和 upper() 改变大小写。这些方法都返回新字符串,不会修改原字符串。需要同时处理时,可以链式调用。
raw = " MAYA "
clean = raw.strip().lower()
print(clean)
print(raw)链式调用字符串方法
拆分与连接
split(separator) 把字符串变成字段列表。join(iterable) 把一个字符串集合合并成一个字符串。join 前面的字符串就是分隔符。
row = "拿铁,4.5,2"
fields = row.split(",")
print(fields)
print(" | ".join(fields))类似 CSV 的文本
替换与切片
replace(old, new) 会替换所有匹配的子串。切片读取一段字符:text[0:4] 从索引 0 开始,到索引 4 之前结束。负索引从末尾开始计数。
text = "hello world"
print(text.replace("world", "Python"))
print(text[0:5])
print(text[-5:])替换与切片
比较前先规范化
用户输入常有额外空格和大小写差异。比较前先规范化:逐项 strip()、转小写,再用清晰的分隔符连接。如果显示需要保留大小写,就把原始值和规范化后的键分开保存。
raw = " Latte, Tea ,Mocha "
items = [part.strip().lower() for part in raw.split(",")]
print(items)
print(" | ".join(items))先清理每个字段,再连接
先分割、检查,再解包
split() 把一条记录拆成字段,解包再给每个字段命名。切片可以取出年份、月份这类固定位置。处理真实数据前先检查字段数量,少一个字段就会触发 ValueError。
record = "2026-10-28|latte|4.50"
parts = record.split("|")
if len(parts) == 3:
date, name, price = parts
print(date[:4], date[5:7], date[8:10])
print(name.capitalize(), float(price))
else:
print("invalid record")解包前先检查字段数量
先检查形状,再转换
startswith()、endswith() 和 removeprefix() 可以在转换之前检查文字的结构。先转换再验证,会把两种失败混在一起:数据格式不对,以及 ValueError。先确认货币符号,再去掉它,最后转换。形状不对时返回清晰的错误,不要让 float() 决定错误信息。
raw = "$4.50"
if raw.startswith("$"):
amount = float(raw.removeprefix("$"))
print(f"{amount:.2f}")
else:
print("缺少货币符号")先验证前缀,再转换
本课要点
- 字符串方法返回新值,原字符串不会被修改。
- strip 去掉两端空白,replace 替换精确的子串。
- split 把文本拆成字段,join 把字段重新合成文本。
- 切片不包含结束索引对应的字符。
- 比较用户输入前,先统一大小写和空白。
- 在调用 float() 或 int() 之前,先验证文字的格式。
常见错误
- 对列表直接调用 strip,而不是对列表中的每个字符串调用。
- 对数字列表调用 join,却没有先把数字转成字符串。
- 以为 text[1:3] 会包含索引 3 的字符。
- 先 split 再忘记逐项 strip,字段里留下多余空格。
- 对仍然含有货币符号的文字调用 float()。
清理一个带空格的姓名,拆分逗号分隔的订单,再用短横线把字段连接起来。
动手试试
改改变量、先预测输出,再运行代码。第一次点击“运行代码”时会下载 Python 运行时,可能需要几秒钟。
练习本课
12 道题,作答后立即看到解释。