发布于2026-07-18 阅读(0)
扫一扫,手机访问
在日常的Python开发中,处理文本数据几乎是家常便饭。无论是清洗日志、解析配置文件,还是从杂乱的网页中提取关键信息,字符串操作都是绕不开的基本功。而在这门基本功里,strip() 和 split() 这两个方法,绝对算得上是最被高频使用,却也最容易因细节疏忽而“翻车”的两个函数。
它们一个负责“修剪”,一个负责“拆分”,配合起来能解决大量文本清洗的痛点。但你真的完全搞懂它们的脾气了吗?比如,strip("abc") 到底删了什么?split() 默认拆分时,连续的空格怎么处理?如果你心里没底,那这篇文章正好适合你,咱们一起来把这俩函数吃透。
简单来说,strip() 就是字符串的“去角质”工具。它专门用于搞定字符串开头和结尾的指定字符,默认情况下,它会干掉空格、换行符、制表符这些你看得见或看不见的“空白垃圾”。但要记住,它非常克制,绝不会动字符串中间的内容一根汗毛。

str.strip([chars])
chars 是可选的。注意,它定义的是一个字符集合,而不是一个固定的子字符串。翻译乘人话就是:只要你开头或结尾出现了集合里的任意一个字符,我就删,删到没有为止。lstrip():只盯着开头删,结尾的不管。rstrip():只盯着结尾删,开头的不管。看代码最直观。咱们用方括号把字符串包起来,这样空白字符就无处遁形了。
# 原始字符串(首尾有空格、换行符,中间有空格)
s = " \t Hello World\n "
print(f"原始字符串(带占位符):[{s}]") # 用[]包裹更易看出空白
# strip():删除首尾所有空白符
s_stripped = s.strip()
print(f"strip() 处理后:[{s_stripped}]") # [Hello World]
# lstrip():只删开头空白
s_lstripped = s.lstrip()
print(f"lstrip() 处理后:[{s_lstripped}]") # [Hello World
# ]
# rstrip():只删结尾空白
s_rstripped = s.rstrip()
print(f"rstrip() 处理后:[{s_rstripped}]") # [ Hello World]
输出:
原始字符串(带占位符):[ Hello World
]
strip() 处理后:[Hello World]
lstrip() 处理后:[Hello World
]
rstrip() 处理后:[ Hello World]
重点来了。当 chars 参数存在时,它的行为是“逐个挑刺”。只要首尾的字符落在了这个集合里,它就删除,然后检查下一个,直到遇到一个不在集合里的字符才停下来。
# 示例1:删除首尾的指定字符(数字+下划线)
s1 = "__123Python678__"
s1_stripped = s1.strip("_0123456789")
print(f"s1 处理后:{s1_stripped}") # Python
# 示例2:删除首尾的特定符号(注意:字符顺序不影响)
s2 = "###@@@Hello@@@###"
s2_stripped = s2.strip("#@") # 只要是#或@,首尾都删
print(f"s2 处理后:{s2_stripped}") # Hello
# 示例3:中间的字符不会被删
s3 = "aabbaHelloabbaa"
s3_stripped = s3.strip("ab")
print(f"s3 处理后:{s3_stripped}") # Hello
这里有两个非常经典的“想当然”错误。
误区 1:以为 strip("abc") 是去匹配并删除字符串首尾精确的 "abc" 子串。错啦!它是把 a、b、c 三个字符拆开来看,只要有任何一个出现在首尾,就直接干掉。
s = "abc123abc"
print(s.strip("abc")) # 123(正确),而非 123abc(误区)
误区 2:觉得执行了 s.strip(),变量 s 的值就变了。这又是一个经典误解。字符串是不可变的,你必须把返回值重新赋值给变量才行:s = s.strip()。
s = " test " s.strip() print(s) # 仍为 " test ",需重新赋值:s = s.strip()
如果说 strip() 是做“减法”,那 split() 就是做“分割”。它像一把刀,按你指定的分隔符,把字符串切成一块块的列表元素,而分隔符本身会被丢弃。
str.split(sep=None, maxsplit=-1)
sep,分隔符。如果不给,默认是 None,这时候它的规则是:按任意空白符(空格、换行、制表符等)拆分,并且会把多个连续的空白符当成一个来对待。maxsplit,最大拆分次数。默认是 -1,意思是“拆到不能再拆为止”。你可以指定一个数字来限制拆分的次数,这在处理某些有固定结构的字符串时非常有用。注意看默认行为,对于“脏”的空白字符串,它的处理非常智能。
# 示例1:多个连续空格 s1 = "Python Ja va C++ Go" print(s1.split()) # ['Python', 'Ja va', 'C++', 'Go'] # 示例2:混合空白符(空格+制表符+换行符) s2 = "a\tb c\nd" print(s2.split()) # ['a', 'b', 'c', 'd'] # 示例3:空字符串拆分(返回只含原字符串的列表) s3 = "" print(s3.split()) # [](注意:空字符串按默认拆分返回空列表)
这是最常用的方式,比如解析CSV数据。
# 示例1:按逗号拆分(CSV数据常用)
s4 = "张三,28,销售,8000"
print(s4.split(",")) # ['张三', '28', '销售', '8000']
# 示例2:按固定字符串拆分(不是字符集合)
s5 = "Python|Ja va|C++|Go"
print(s5.split("|")) # ['Python', 'Ja va', 'C++', 'Go']
# 示例3:分隔符不存在(返回只含原字符串的列表)
s6 = "HelloWorld"
print(s6.split(",")) # ['HelloWorld']
当你想保留后面部分作为一个整体时,maxsplit 就派上用场了。
# 示例1:maxsplit=2(只拆分前2个分隔符)
s7 = "a,b,c,d,e"
print(s7.split(",", maxsplit=2)) # ['a', 'b', 'c,d,e']
# 示例2:maxsplit=0(不拆分)
print(s7.split(",", maxsplit=0)) # ['a,b,c,d,e']
rsplit() 跟 split() 是一对好兄弟,功能完全一致,唯一的区别在于,当指定 maxsplit 时,rsplit() 是从字符串右边开始找分隔符进行拆分。
s8 = "a,b,c,d,e"
print(s8.split(",", maxsplit=2)) # ['a', 'b', 'c,d,e'](从左拆)
print(s8.rsplit(",", maxsplit=2)) # ['a,b,c', 'd', 'e'](从右拆)
这几个坑也是新人容易掉进去的。
误区 1:以为拆分后分隔符还被保留。不存在的,分隔符会被毫不留情地丢弃。
s = "1-2-3"
print(s.split("-")) # ['1','2','3'](无分隔符)
误区 2:试图用空字符串 "" 作为分隔符。Python 会直接报错 ValueError: empty separator。如果你想把字符串切分成单个字符,正确的姿势是用 list(s)。
# s.split("") # 直接报错,如需逐个字符拆分用 list(s)
s = "abc"
print(list(s)) # ['a','b','c'](正确方式)
误区 3:拆分后的数据里带着多余的空格。比如 CSV 里的 "张三, 28",直接拆分你会得到一个 " 28"。这就需要我们下一节的大招——组合使用。
s9 = "张三, 28, 销售, 8000"
# 先拆分,再逐个清洗首尾空格
result = [item.strip() for item in s9.split(",")]
print(result) # ['张三', '28', '销售', '8000']
官方认证的王炸组合。在实际项目里,你拿到的原始数据很少是干干净净的。解决“字符串有多余空白 + 需要拆分”这个经典问题,靠的就是这套组合拳。
# 原始日志(首尾有空格,分隔符是多个空格+|)
log = " 2026-03-01 | INFO | 用户登录成功 "
# 步骤1:清理首尾空白 → 步骤2:按|拆分 → 步骤3:清洗每个字段的空白
log_clean = [item.strip() for item in log.strip().split("|")]
print(log_clean) # ['2026-03-01', 'INFO', '用户登录成功']
# 用户输入(用逗号/空格混合分隔,首尾有空白)
user_input = " Python, Ja va , C++ | Go "
# 先统一替换非逗号分隔符为逗号,再清洗+拆分
input_clean = user_input.strip().replace(" | ", ",").replace(" ", "")
result = input_clean.split(",")
print(result) # ['Python', 'Ja va', 'C++', 'Go']
最后,我们用最精炼的语言回顾一下这两个函数的精髓:
strip () 系列:专门治理字符串首尾的“脏东西”。注意,它识别的是字符集合,不是固定字符串。而且,它是个“君子动口不动手”,必须重新赋值才有用。
lstrip():删开头rstrip():删结尾split () 系列:字符串的“分割线”。默认情况下,它能把被各种空白字符搅乱的字符串,优雅地拆成一个列表。记住,分隔符本身会被丢弃,且不能传空字符串。
rsplit():从右往左拆,在限定拆分次数时尤其好用。组合使用:无论是在数据处理还是日志清洗中,“strip() + split() + 列表推导式”这套组合拳,都是文本清洗领域的标准作业流程。先用 strip() 清扫大门,再用 split() 的内部切割,最后用 strip() 逐块抛光,一套下来,数据焕然一新。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8