当前位置: 首页 > news >正文

Python str 字符串方法的全面、系统、分类详解

前提:字符串是不可变对象

所有字符串方法不会修改原字符串,而是返回新字符串(或整数、布尔值等)。

s = "hello" s.upper() # 返回 "HELLO",但 s 仍是 "hello"

一、大小写转换类

方法功能示例
str.upper()转为大写"Hello".upper()"HELLO"
str.lower()转为小写"HELLO".lower()"hello"
str.capitalize()首字母大写,其余小写"hello WORLD".capitalize()"Hello world"
str.title()每个单词首字母大写"hello world".title()"Hello World"
str.swapcase()大小写互换"Hello".swapcase()"hELLO"
str.casefold()更彻底的小写(用于无大小写比较)"ß".casefold()"ss"

casefold()vslower()

  • lower()仅做基本小写转换
  • casefold()用于语言无关的大小写折叠(如德语 ß → ss),适合做相等性比较:
    "Maße".casefold() == "MASSE".casefold() # True

二、查找与索引类

方法功能返回值异常
str.find(sub[, start[, end]])查找子串首次出现位置索引(int)或-1
str.rfind(sub[, start[, end]])从右查找子串首次出现索引或-1
str.index(sub[, start[, end]])find,但未找到抛异常索引ValueError
str.rindex(sub[, start[, end]])从右查找,未找到抛异常索引ValueError
str.count(sub[, start[, end]])统计子串出现次数整数 ≥0

推荐:优先用find()(安全),除非你明确希望未找到时崩溃。

text = "apple apple" print(text.find("apple")) # 0 print(text.rfind("apple")) # 6 print(text.count("p")) # 4

三、判断类(返回 bool)

通用判断

方法条件
str.startswith(prefix)以指定前缀开头(prefix可为元组)
str.endswith(suffix)以指定后缀结尾(suffix可为元组)
url = "https://example.com" url.startswith(("http://", "https://")) # True file = "data.csv" file.endswith((".csv", ".txt")) # True

内容类型判断

方法说明注意事项
str.isalpha()所有字符为字母(Unicode 字母)空格、数字、符号 → False
str.isdigit()所有字符为数字(含上标²、下标等)不含小数点
str.isnumeric()所有字符为数值字符(含汉字“一二三”)范围最广
str.isdecimal()所有字符为十进制数字(0-9)最严格,仅0123456789
str.isalnum()字母或数字(isalpha() or isdigit()
str.isspace()所有字符为空白(空格、\t、\n、\r 等)空字符串 → False
str.islower()至少一个字母且全为小写无字母 → False
str.isupper()至少一个字母且全为大写无字母 → False
str.istitle()每个单词首字母大写(其余小写)"Hello World".istitle()→ True
str.isidentifier()是否为合法 Python 标识符"123abc".isidentifier()→ False

数字判断区别示例

s1 = "123" s2 = "²" # 上标 2 s3 = "一二三" print(s1.isdecimal(), s1.isdigit(), s1.isnumeric()) # True True True print(s2.isdecimal(), s2.isdigit(), s2.isnumeric()) # False True True print(s3.isdecimal(), s3.isdigit(), s3.isnumeric()) # False False True

四、去除空白/指定字符

方法功能默认行为
str.strip([chars])去除首尾字符去除空白(空格、\t、\n 等)
str.lstrip([chars])仅去除左侧
str.rstrip([chars])仅去除右侧

chars字符集合,不是前缀/后缀!
它会移除任意顺序的这些字符,直到遇到不在chars中的字符。

" hello ".strip() # "hello" "www.example.com".strip("wcom.") # "example"(注意:'e' 保留,因为 '.' 被移除后 'e' 不在 chars 中) "xyxxyyhelloxyx".strip("xy") # "hello"

五、分割与连接

分割

方法功能特点
str.split(sep=None, maxsplit=-1)按分隔符分割sep=None时按任意空白分割,忽略连续空白
str.rsplit(sep=None, maxsplit=-1)从右开始分割maxsplit有效时与split不同
str.splitlines(keepends=False)按行分割自动处理\n,\r\n,\r等;keepends=True保留换行符
"a b c".split() # ['a', 'b', 'c'] "a,b,c".split(",", 1) # ['a', 'b,c'] "line1\nline2\r\nline3".splitlines() # ['line1', 'line2', 'line3']

连接

方法功能
str.join(iterable)将可迭代对象中的字符串用当前字符串连接
"-".join(["a", "b", "c"]) # "a-b-c" "".join(map(str, [1, 2, 3])) # "123"

最佳实践:拼接大量字符串时,务必使用join(),而非+循环。


六、替换与修改

方法功能参数
str.replace(old, new[, count])替换子串count:最多替换次数
str.expandtabs(tabsize=8)\t替换为空格指定制表符宽度
"hello world".replace("l", "L", 2) # "heLLo world" "col1\tcol2".expandtabs(4) # "col1 col2"

七、对齐与填充

方法功能默认填充字符
str.center(width[, fillchar])居中对齐空格' '
str.ljust(width[, fillchar])左对齐空格
str.rjust(width[, fillchar])右对齐空格
str.zfill(width)'0'填充到指定宽度(考虑符号)'0'
"42".center(10, '-') # "---42----" "42".zfill(5) # "00042" "-42".zfill(5) # "-0042"(符号位保留)

八、编码与字节转换

方法功能常用参数
str.encode(encoding='utf-8', errors='strict')转为bytesencoding:'utf-8','ascii','gbk'
errors:'strict'(默认),'ignore','replace'
"你好".encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd' "café".encode('ascii', errors='replace') # b'caf?'

注意str类型没有.decode()方法!解码是bytes的方法:

b"hello".decode('utf-8') # "hello"

九、分区(Partitioning)

方法功能返回值
str.partition(sep)从左分割为 (前, sep, 后)三元组(tuple)
str.rpartition(sep)从右分割三元组

优势:即使sep不存在,也不会报错,而是返回('', '', 原字符串)(原字符串, '', '')

"foo@bar.com".partition("@") # ('foo', '@', 'bar.com') "no-at-sign".partition("@") # ('no-at-sign', '', '')

十、格式化相关(现代方式见 f-string)

虽然 f-string 是首选,但以下方法仍有用:

方法用途
str.format(*args, **kwargs)格式化模板
str.format_map(mapping)使用字典映射格式化(支持缺失键处理)
"{name} is {age} years old".format(name="Alice", age=30) "{name} lives in {country}".format_map({"name": "Bob"}) # KeyError! # 可继承 dict 实现 __missing__ 避免错误

十一、其他实用方法

方法功能
str.translate(table)按映射表批量替换字符(高效)
str.maketrans(x[, y[, z]])创建translate用的映射表
# 删除所有元音字母 trans = str.maketrans('', '', 'aeiou') "hello world".translate(trans) # "hll wrld" # 字符替换 trans = str.maketrans('ae', 'AE') "apple".translate(trans) # "AppLE"

总结:高频使用场景速查

场景推荐方法
拼接列表 → 字符串"sep".join(list)
安全查找子串.find()/.startswith()
清理输入.strip()+.lower()
分割 CSV 行.split(",")
按行处理文本.splitlines()
数字字符串补零.zfill(width)
大小写无关比较str1.casefold() == str2.casefold()
批量字符替换/删除.translate()+.maketrans()

📚官方文档参考:Python str 文档

http://www.jsqmd.com/news/483697/

相关文章:

  • Qwen3-VL-2B与LLaVA对比:轻量级视觉模型谁更胜一筹?
  • Optic API文档工具终极指南:从入门到精通
  • Windows系统终极清理指南:双版本无忧优化工具Win11Debloat
  • PP-DocLayoutV3参数详解:11类版面元素检测逻辑、置信度阈值与坐标输出规范
  • 霜儿-汉服-造相Z-Turbo免配置环境:无需conda/pip安装,Docker run即启服务
  • SmolVLA开源模型部署教程:HuggingFace模型权重本地加载全流程
  • 如何快速部署Dify.AI:开源LLM应用平台的完整指南
  • OneAPI多模型API标准化:解决厂商锁定、提升迁移灵活性的实践
  • QWEN-AUDIO效果展示:呼吸感停顿+口语化重音+自然语调起伏
  • FireRedASR-AED-L部署案例:高校图书馆讲座录音归档+知识图谱构建
  • 生物统计学研究中的不确定性难题:PyMC概率编程如何提供科学解决方案
  • Next.js配置进阶:从基础到企业级实践全指南
  • Pi0 VLA开源模型部署:支持ONNX Runtime跨平台推理的转换与验证流程
  • GTE中文嵌入模型入门必看:中文标点、空格、全半角字符对向量生成的影响测试
  • Qwen3-ASR-0.6B惊艳效果:嘈杂背景音下普通话识别WER<8%实测报告
  • 二叉树知识点总结未完版
  • nlp_structbert_sentence-similarity_chinese-large详细步骤:本地化部署+GPU推理+结果可视化
  • 江科大-STM32学习笔记【更新中】
  • C语言手写堆|从定义到排序,一篇带你搞定所有接口!
  • 苍穹外卖个人技术总结Day03
  • OneAPI镜像免配置部署教程:单文件Docker开箱即用,支持OpenAI/Gemini/Claude等全生态
  • MATLAB矩阵的操作|从线代到实战,一篇就够!
  • CentOS 7.9.2009升级最新的Linux Kernel 6.9.7
  • B站UP主生产力工具:AnythingtoRealCharacters2511快速生成视频开场真人化角色动画
  • Qwen3-ASR-1.7B部署教程:单卡A10/A100部署高精度语音识别系统
  • SecGPT-14B部署教程:解决模型加载失败、Chainlit连接超时问题
  • MiniCPM-o-4.5-nvidia-FlagOS开发者案例:接入企业知识库实现图文混合RAG检索
  • BGE-Large-Zh惊艳效果:中文长句(50字)仍保持高精度语义向量化
  • FireRed-OCR Studio效果展示:学术会议投稿系统PDF→作者信息+摘要+关键词+参考文献自动抽取
  • yz-bijini-cosplay完整指南:Z-Image原生Transformer架构适配解析