编程学习网 > 编程语言 > Python > 这6个函数能解决80%文本问题!Python字符串处理别再只会strip()
2025
10-15

这6个函数能解决80%文本问题!Python字符串处理别再只会strip()


做Python开发这么久,发现很多朋友处理字符串时,翻来覆去就只用一个strip()。

遇到要分割文本、替换字符或者定位内容的场景,要么绕远路写一堆循环,要么直接百度找片段代码,根本没意识到其实有几个内置函数能轻松搞定80%的文本处理需求。
今天就把我平时工作里用得最多的6个函数拎出来,结合实际场景讲清楚,新手也能一看就会,下次处理文本不用再慌。

先说明下,这些函数不是什么冷门工具,全是Python自带的内置函数,不用装任何第三方库,打开编辑器就能用。
我会每个函数都结合真实工作场景讲,比如数据清洗、日志分析这些常见需求,再补上新手容易踩的坑,保证学完就能直接用在项目里。

1. split():不止能按逗号分割,复杂分隔也能搞定。

很多人用split()只知道传一个分隔符,比如split(',')用来拆逗号分隔的文本,但实际工作里遇到的分隔符往往没这么规整。
上次我处理用户地址数据时,有些地址是“北京市,朝阳区”,有些是“上海市 浦东新区”,还有些是“广州市-天河区”,混合了逗号、空格和横杠,要是一个个判断分隔符也太麻烦了。

其实split()不用传具体分隔符,直接用split()(括号里空着)就能自动处理所有空白字符,包括空格、换行符这些。
要是遇到多种非空白分隔符,比如刚才的逗号和横杠,只要搭配正则表达式的re.split()就行,一行代码就能搞定。

举个实际例子,处理混合分隔的地址:

import re
# 混合了不同分隔符的地址列表
addresses = ["北京市,朝阳区", "上海市 浦东新区", "广州市-天河区"]
for addr in addresses:
# 用re.split()匹配逗号、空格、横杠,统一分割成城市和区域
city, area = re.split(r'[, -]', addr)
print(f"城市:{city},区域:{area}")

运行后直接得到规整的城市和区域,不用写一堆if判断,这里要注意个坑:
如果文本里有连续的分隔符,比如“深圳市--南山区”,re.split()会拆出空字符串,这时可以加个参数re.split(r'[, -]+', addr),用“+”表示匹配一个或多个分隔符,就能避免空值问题。

2. join():拼接字符串别再用“+”,效率差太多。

新手拼接字符串最爱用“+”,比如a + b + c,要是只拼两三个还好,一旦要拼几十上百个,效率会特别低。
因为字符串在Python里是不可变的,每用一次“+”就会新建一个字符串,拼1000个字符串就要新建1000次,耗时又占内存。

我之前做日志拼接时,要把1000条日志片段拼在一起,用“+”循环拼花了0.8秒,换成join()只花了0.02秒,效率差了40倍。
join()的用法也简单,先把要拼接的内容放进列表里,再用目标分隔符调用join()就行,比如用逗号拼接就写','.join(列表)。

看个实际场景,拼接日志内容:

import time
# 模拟1000条日志片段
log_parts = [f"[{i}] 操作成功" for i in range(1000)]
# 用“+”拼接,记录时间
start_time = time.time()
log_str_plus = ""
for part in log_parts:
log_str_plus += part + "\n"
end_time = time.time()
print(f"用'+'拼接耗时:{end_time - start_time:.4f}秒")
# 用join()拼接,记录时间
start_time = time.time()
log_str_join = "\n".join(log_parts)
end_time = time.time()
print(f"用join()拼接耗时:{end_time - start_time:.4f}秒")

运行后能明显看到差距,而且拼接的内容越多,join()的优势越明显。记住,只要是批量拼接字符串,优先用join()准没错。

3. replace():多字符替换不用循环,一次搞定。

replace()的基础用法大家都知道,比如把文本里的“错误”换成“异常”,但遇到要同时替换多个字符时,很多人会写多个replace()嵌套,或者用循环一个个换,代码又长又难读。

其实不用这么麻烦!
只要把要替换的内容做成一个字典,比如{“错误”:“异常”, “失败”:“未成功”, “超时”:“超期”},再用一个生成器表达式配合join(),就能一次完成多字符替换。
我上次处理接口返回的错误信息时,就是用这个方法,把10多个要替换的关键词一次性处理完,代码特别简洁。

举个替换错误信息的例子:

# 原始错误信息
error_msg = "接口调用错误,数据提交失败,请求超时,请重试"
# 要替换的关键词字典
replace_dict = {"错误": "异常", "失败": "未成功", "超时": "超期"}
# 多字符替换:遍历字典,依次替换
processed_msg = error_msg
for old, new in replace_dict.items():
processed_msg = processed_msg.replace(old, new)
print(processed_msg)
# 输出结果:接口调用异常,数据提交未成功,请求超期,请重试

要是觉得循环不够简洁,也可以用functools.reduce()简化,但上面的循环写法更直观,新手也能一眼看明白。
这里要注意!
replace()还有个可选的第三个参数count,比如replace("a", "b", 2)表示只替换前2个“a”,处理部分替换需求时很有用。

4. find() & rfind():定位字符不用遍历,精准又快速。

想在字符串里找某个字符或子串的位置,很多人会用for循环一个个判断,其实用find()就能直接拿到位置,找不到还会返回-1,不用自己处理异常。
更实用的是rfind(),它是从字符串末尾开始找,比如处理文件路径时,想提取文件名,用rfind("\")找到最后一个反斜杠的位置,再切片就能拿到文件名,比split()处理路径更靠谱。

我上次处理批量文件时,要从“D:\data\report\202405.xlsx”这种路径里提取文件名,用rfind()一行代码就搞定了:

# 文件路径
file_path = "D:\\data\\report\\202405.xlsx"
# 用rfind()找最后一个反斜杠的位置
last_slash_idx = file_path.rfind("\\")
# 切片提取文件名(从反斜杠后一位开始到末尾)
file_name = file_path[last_slash_idx + 1:]
print(file_name)
# 输出结果:202405.xlsx

这里要区分find()和index():
index()找不到子串时会报错,而find()返回-1,实际处理数据时,用find()更安全,不用加try-except捕获异常。
比如判断文本里有没有“警告”关键词,直接写if text.find("警告") != -1就行,简单又高效。

5. startswith() & endswith():批量判断前缀后缀,比切片更直观。

判断字符串是不是以某个前缀开头,或者以某个后缀结尾,比如判断文件名是不是Excel文件(后缀是.xlsx或.xls),很多人会用切片,比如file_name[-4:] == ".xlsx",但这样要写多个判断,还容易出错(比如后缀长度不一样时)。

用startswith()和endswith()就简单多了,还能同时传多个参数判断。
比如判断是不是Excel文件,直接写file_name.endswith((".xlsx", ".xls")),不用写一堆or连接的判断。
我上次做文件筛选时,用这两个函数筛选出Excel和CSV文件,代码特别清爽。

看个筛选文件的例子:

# 文件夹里的文件列表
file_list = ["report.xlsx", "data.csv", "notes.txt", "stats.xls", "image.png"]
# 要筛选的文件后缀
target_suffixes = (".xlsx", ".xls", ".csv")
# 筛选目标文件
target_files = [file for file in file_list if file.endswith(target_suffixes)]
print(target_files)
# 输出结果:['report.xlsx', 'data.csv', 'stats.xls']

startswith()的用法类似,比如判断手机号是不是以“138”“139”开头,写phone.startswith(("138", "139"))就行。
这两个函数还支持传start和end参数,比如判断字符串从第2位开始是不是以“abc”开头,写text.startswith("abc", 1)(注意Python里索引从0开始)。

6. format():字符串格式化别再拼“+”,灵活又不易错。

很多人拼接带变量的字符串时,还在用“姓名:”+ name + “年龄:”+ str(age)这种写法,不仅要手动转类型(比如把int转str),还容易漏写加号或引号,调试起来很麻烦。
用format()就没这些问题,把变量用大括号占位,再在format()里传参数就行,甚至能指定格式,比如保留2位小数。

我平时写报告生成功能时,经常用format()拼接带变量的文本,比如:

# 用户数据
name = "张三"
age = 28
score = 92.5
# 用format()格式化字符串
user_info = "姓名:{},年龄:{},测试得分:{:.1f}".format(name, age, score)
print(user_info)
# 输出结果:姓名:张三,年龄:28,测试得分:92.5

这里{:.1f}表示把score格式化为保留1位小数的浮点数,还有很多实用格式,比如{:04d}表示把数字补成4位(比如3变成0003),处理编号时很有用。
要是觉得占位符写数字麻烦,也可以用关键字参数,比如“姓名:{name},年龄:{age}”.format(name=name, age=age),更直观。

总结:6个函数对应80%文本场景,收藏起来下次直接用。

其实平时处理文本,大部分需求都是“分割、拼接、替换、定位、判断、格式化”这六种,把上面6个函数用熟,基本不用再写复杂的循环或逻辑。
我整理了个简单的场景对应表,下次遇到问题直接查:

- 分割文本(地址、CSV数据):split() + re.split()
- 批量拼接(日志、报告):join()
- 替换字符(错误信息、关键词):replace() + 字典
- 定位内容(文件路径、关键词):find() + rfind()
- 判断前缀后缀(文件名、手机号):startswith() + endswith()
- 带变量拼接(用户信息、报告):format()

最后给大家留个小练习:
用今天讲的函数处理一段日志文本,把“Error”换成“异常”,提取出所有以“[INFO]”开头的行,再拼接成一段完整的日志。
试着写一下,遇到问题再回头看对应的函数用法,很快就能掌握。

平时处理字符串时,别再一上来就写循环,先想想这6个函数能不能解决,效率和代码简洁度都会提升很多。

以上就是“这6个函数能解决80%文本问题!Python字符串处理别再只会strip()的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取