当前位置:

首页 > 编程开发 > python中split()和strip()函数的结合使用

python中split()和strip()函数的结合使用

本文目录

    strip()函数清理字符串首尾指定字符(默认空白符),split()函数按分隔符拆分字符串(默认连续空白符视为一个)。两者结合使用可高效清洗文本数据:先strip()清理首尾,再split()拆分,最后用列表推导式对每个元素strip()去除多余空格。注意strip()识别字符集合而非子串,split()不能传空字符串,且字符串不可变需重新赋值。

    在日常的Python开发中,处理文本数据几乎是家常便饭。无论是清洗日志、解析配置文件,还是从杂乱的网页中提取关键信息,字符串操作都是绕不开的基本功。而在这门基本功里,strip() 和 split() 这两个方法,绝对算得上是最被高频使用,却也最容易因细节疏忽而“翻车”的两个函数。

    它们一个负责“修剪”,一个负责“拆分”,配合起来能解决大量文本清洗的痛点。但你真的完全搞懂它们的脾气了吗?比如,strip("abc") 到底删了什么?split() 默认拆分时,连续的空格怎么处理?如果你心里没底,那这篇文章正好适合你,咱们一起来把这俩函数吃透。

    一、strip () 函数:清理字符串首尾的 “多余字符”

    1. 核心作用

    简单来说,strip() 就是字符串的“去角质”工具。它专门用于搞定字符串开头和结尾的指定字符,默认情况下,它会干掉空格、换行符、制表符这些你看得见或看不见的“空白垃圾”。但要记住,它非常克制,绝不会动字符串中间的内容一根汗毛。

    python中split()和strip()函数的结合使用

    2. 语法与参数

    str.strip([chars]) 
    • 参数:chars 是可选的。注意,它定义的是一个字符集合,而不是一个固定的子字符串。翻译乘人话就是:只要你开头或结尾出现了集合里的任意一个字符,我就删,删到没有为止。
    • 返回值:返回一个全新的字符串。Python 字符串是不可变的,这点务必牢记,原地修改是不会生效的。
    • 衍生方法:
      • lstrip():只盯着开头删,结尾的不管。
      • rstrip():只盯着结尾删,开头的不管。

    3. 基础示例(默认删除空白符)

    看代码最直观。咱们用方括号把字符串包起来,这样空白字符就无处遁形了。

    # 原始字符串(首尾有空格、换行符,中间有空格)
    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]

    4. 进阶示例(指定删除的字符)

    重点来了。当 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

    5. 常见坑点

    这里有两个非常经典的“想当然”错误。

    误区 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()

    二、split () 函数:拆分字符串为列表

    1. 核心作用

    如果说 strip() 是做“减法”,那 split() 就是做“分割”。它像一把刀,按你指定的分隔符,把字符串切成一块块的列表元素,而分隔符本身会被丢弃。

    2. 语法与参数

    str.split(sep=None, maxsplit=-1) 
    • 参数 1:sep,分隔符。如果不给,默认是 None,这时候它的规则是:按任意空白符(空格、换行、制表符等)拆分,并且会把多个连续的空白符当成一个来对待。
    • 参数 2:maxsplit,最大拆分次数。默认是 -1,意思是“拆到不能再拆为止”。你可以指定一个数字来限制拆分的次数,这在处理某些有固定结构的字符串时非常有用。
    • 返回值:一个包含拆分后子串的列表。

    3. 基础示例(默认按空白符拆分)

    注意看默认行为,对于“脏”的空白字符串,它的处理非常智能。

    # 示例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())  # [](注意:空字符串按默认拆分返回空列表)

    4. 进阶示例(指定分隔符)

    (1)指定单个分隔符

    这是最常用的方式,比如解析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']

    (2)指定最大拆分次数(maxsplit)

    当你想保留后面部分作为一个整体时,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']

    5. 衍生方法:rsplit ()

    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'](从右拆)

    6. 常见坑点

    这几个坑也是新人容易掉进去的。

    误区 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']

    三、split () + strip () 组合使用(实战高频场景)

    官方认证的王炸组合。在实际项目里,你拿到的原始数据很少是干干净净的。解决“字符串有多余空白 + 需要拆分”这个经典问题,靠的就是这套组合拳。

    示例 1:解析日志字符串

    # 原始日志(首尾有空格,分隔符是多个空格+|)
    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', '用户登录成功']

    示例 2:清洗用户输入的多值内容

    # 用户输入(用逗号/空格混合分隔,首尾有空白)
    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']

    总结

    核心要点回顾

    最后,我们用最精炼的语言回顾一下这两个函数的精髓:

    1. strip () 系列:专门治理字符串首尾的“脏东西”。注意,它识别的是字符集合,不是固定字符串。而且,它是个“君子动口不动手”,必须重新赋值才有用。

      • lstrip():删开头
      • rstrip():删结尾
    2. split () 系列:字符串的“分割线”。默认情况下,它能把被各种空白字符搅乱的字符串,优雅地拆成一个列表。记住,分隔符本身会被丢弃,且不能传空字符串。

      • rsplit():从右往左拆,在限定拆分次数时尤其好用。
    3. 组合使用:无论是在数据处理还是日志清洗中,“strip() + split() + 列表推导式”这套组合拳,都是文本清洗领域的标准作业流程。先用 strip() 清扫大门,再用 split() 的内部切割,最后用 strip() 逐块抛光,一套下来,数据焕然一新。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。