Python3.5字符串常用操作实例详解
前言标题把版本锁在 Python 3.5这个限制很要紧所以先把结论写在最前面字符串的绝大多数常用操作从 Python 3 早期到现在几乎没有变过——切片、join、split、strip、replace、find、startswith、大小写转换、%与str.format格式化这些在 3.5 上都能正常使用。但有几个如今被大量使用的写法在 3.5 上根本不存在最常见的三个是f-string3.6 才有、str.removeprefix/str.removesuffix3.9 才有、以及 f-string 里的引号复用与多行表达式3.12 的 PEP 701 才放开。如果你手头真的是 3.5照抄现在的教程会一路报SyntaxError。另外必须提醒一个前提问题Python 3.5 已经是停止维护的版本。按 Python 官方开发者指南的版本表3.5 于 2015 年 9 月 13 日发布2020 年 9 月 30 日进入生命周期终点end-of-life此后不再有安全修复。本文按标题要求以 3.5 为基准写但会指出每段写法在后续版本里的变化建议尽快迁移到仍在安全支持期内的版本。本文所有代码都只用标准库。本机没有 Python 解释器示例未在真实解释器上执行结论按官方文档逐条核对过的 API 语义写成包括方法的返回类型与是否原地修改。一、第一条铁律字符串不可变Python 3 的str是不可变immutable的。这意味着两件事所有「看起来像修改」的方法都返回新对象原字符串不动。s.upper()、s.replace(...)、s.strip()都是如此。忘记接住返回值就会得到「我明明处理过了怎么还是老样子」的经典困惑。在循环里用拼接字符串会反复产生新对象。可读性上没问题但数据量大时应当改用列表收集、最后.join(parts)一次性拼接。这里不给出任何「快多少倍」的数字——那是需要你自己用timeit在同机上测的。# 适用于 Python 3.5s hello worldt s.upper() # 返回新字符串print(s) # hello worlds 没有被改变print(t) # HELLO WORLDparts []for word in [a, b, c]:parts.append(word)print(-.join(parts)) # a-b-cjoin 的调用者是分隔符不是列表二、按用途分类的常用操作Python 的字符串方法数量不少但按用途归类后就清晰了。下表是 3.5 上可用的主要方法及其要点。用途方法要点查找find/rfind/index/rindex/countfind找不到返回-1index找不到抛ValueError前后缀startswith/endswith可以直接传元组一次判断多种前缀判断isalpha/isdigit/isalnum/isspace/isupper/islower/istitle空字符串对它们一律返回False切分split/rsplit/splitlines/partitionsplit不传分隔符会按空白切分并合并连续空白拼接join只在字符串列表上可用元素不是str会TypeError修剪strip/lstrip/rstrip参数是字符集合不是前缀字符串填充对齐center/ljust/rjust/zfill宽度不够时才填充zfill处理正负号位置特殊大小写upper/lower/casefold/capitalize/title/swapcase做不区分大小写的比较casefold比lower更彻底替换与翻译replace/translate配str.maketransreplace可限制次数translate适合多字符批量替换关于几个细节值得单独强调strip(abc)不是去掉前缀abc而是去掉首尾属于{a,b,c}的任意字符。cbaxyzab.strip(abc)会得到xyz——这是个真会踩的坑。split(sepNone)与split( )不同前者把连续空白视作一个分隔符并丢弃首尾空白后者会切出空字符串。官方签名写作split(sepNone, maxsplit-1)。count、find、startswith这类方法支持起止下标但下标是「切片语义」超出长度不会报错只会得到空区间。3.5 上可用的两种格式化%运算符和str.format在 3.5 上都完整可用。str.format更现代支持位置参数、关键字参数、属性与索引访问。# 适用于 Python 3.5name, score 小明, 91.5# 方式一百分号格式化旧写法但在 3.5 上完全可用print(姓名%s分数%.1f % (name, score))# 方式二str.format3.5 推荐写法print(姓名{0}分数{1:.1f}.format(name, score)) # 位置print(姓名{n}分数{s:.1f}.format(nname, sscore)) # 关键字# 对齐与填充{序号:[填充字符][对齐][宽度][.精度][类型]}print({:*^20}.format(居中)) # 居中、宽度 20、用 * 填充print({:10.2f}.format(3.14159)) # 右对齐、宽度 10、保留两位小数# 也可以对字典用 ** 解包info {n: 小红, s: 88.0}print(姓名{n}分数{s:.1f}.format(**info))格式说明符的语法是[[填充]对齐][符号][宽度][,][.精度][类型]。对齐用左、右、^居中。注意 3.5 里没有 f-string所以f{name}这种写法会直接语法错误——那是 3.6 才引入的PEP 498。编码与解码3 与 2 的断崖Python 3 的str是 Unicode 字符串bytes是字节序列两者不能隐式互转。这是与 Python 2 最主要的差别之一Python 2 里文字是字节串u文字才是 Unicode 字符串Python 3 里str就是文本不需要u前缀。Python 2.7 已于 2020 年 1 月 1 日停止维护下面这些 2 的写法都不要再用print x是语句不是函数3 里必须写print(x)。unicode/basestring/long这三个类型在 3 里不存在分别统一为str/str/int。3 里str是 Unicode 语义读写文件默认编码不是字节语义需要显式声明。# 适用于 Python 3.5text 中文raw text.encode(utf-8) # str - bytesprint(raw) # b\xe4\xb8\xad\xe6\x96\x87back raw.decode(utf-8) # bytes - strprint(back text) # True# 打开文件一定要显式写 encoding否则会跟随系统区域设置with open(note.txt, w, encodingutf-8) as f:f.write(text)with open(note.txt, r, encodingutf-8) as f:print(f.read())三、3.5 用不了、但现在到处都在用的写法特性起始版本3.5 上的替代写法f-stringf{x}3.6PEP 498{0}.format(x)或%s % x等号调试写法f{x}3.8手写x repr(x)或x{0}.format(x)str.removeprefix/str.removesuffix3.9用startswith判断后切片或re.substr.isascii()3.7用all(ord(c) 128 for c in s)f-string 内复用同类引号、跨行表达式3.12PEP 701在 3.5 上根本没有 f-string用format字典合并运算符与字符串无关但常一起出现3.9PEP 584d1.update(d2)或{**d1, **d2}removeprefix/removesuffix的替代写法可以这样推演s.startswith(p)为真时取s[len(p):]否则原样返回。这正好是这两个方法在 3.9 里被加进来的原因——手写容易写错比如忘了startswith判断切片会静默截错。# 适用于 Python 3.5没有 removeprefix 时的等价写法def remove_prefix(s, prefix):if prefix and s.startswith(prefix):return s[len(prefix):]return sdef remove_suffix(s, suffix):if suffix and s.endswith(suffix):return s[:-len(suffix)]return sprint(remove_prefix(https://example, https://)) # exampleprint(remove_suffix(archive.tar.gz, .gz)) # archive.tarprint(remove_suffix(abc, )) # abc空后缀原样返回四、几个实用小例子# 适用于 Python 3.5# 1) 清理用户输入去首尾空白 合并内部连续空白raw hello world cleaned .join(raw.split())print(repr(cleaned)) # hello world# 2) 按行处理splitlines 会同时处理 \n、\r\n、\rmulti 第一行\r\n第二行\n第三行for i, line in enumerate(multi.splitlines(), 1):print(i, line)# 3) 批量字符替换用 maketrans 建表 translatetable str.maketrans({a: 1, b: 2, c: 3})print(cab.translate(table)) # 312# 4) 判断输入是否全为数字注意 isdigit 对全角数字也为 Trueprint(123.isdigit(), .isdigit(), 12.3.isdigit()) # True True False# 5) 用 partition 拆「键值」只会拆一次值里再出现分隔符也不受影响key, sep, value path/usr/local/bin.partition()print(key, sep, value) # path /usr/local/bin常见坑点❌ 以为strip(abc)是去掉前缀字符串abc。 ✅ 它的参数是字符集合会去掉首尾任意属于该集合的字符要去固定前缀请用startswith 切片。❌ 调用s.upper()、s.strip()后不接收返回值以为原变量被改了。 ✅ 字符串不可变所有方法返回新对象必须写s s.strip()或使用返回值。❌ 用index找子串找不到时抛ValueError崩掉。 ✅ 只关心存在性时用find找不到返回-1或in用index就要准备接住异常。❌ 用s.split( )处理用户输入结果切出一堆空字符串。 ✅ 不带参数调用s.split()它会按任意连续空白切分并丢弃首尾空白。❌ 用在循环里拼几百段文本。 ✅ 用列表收集后.join(parts)join的调用者是分隔符参数是可迭代对象。❌ 在 Python 3.5 上照抄 f-string 教程得到SyntaxError: invalid syntax。 ✅ 3.5 用str.format或%要用 f-string 就得升级到 3.6 及以上。❌ 用open(f.txt, r).read()而不写encoding换台机器就读出乱码。 ✅ 显式写encodingutf-8让文件读写不依赖运行环境的默认编码。❌ 用lower()做不区分大小写的比较遇到某些非英文字符仍不相等。 ✅ 涉及 Unicode 的大小写无关比较用casefold()它的折叠规则更彻底。总结分类3.5 可用3.5 不可用拼接join、——切分split、rsplit、splitlines、partition——修剪填充strip、center、ljust、zfill——格式化%、str.formatf-string3.6前后缀startswith/endswith 切片removeprefix/removesuffix3.9判断isdigit、isalpha等isascii()3.7写 3.5 的字符串代码只需要记住三点字符串不可变、strip收的是字符集合、以及 f-string 与removeprefix在这个版本上并不存在。其余操作三十年如一日地稳定把官方文档里str那一节的方法表扫一遍比记任何速查表都管用。最后再强调一次3.5 已于 2020 年 9 月结束支持新代码请用仍在安全支持期内的版本。

相关新闻

DualSense跨平台折腾指南:从HID协议到驱动配置全解析

DualSense跨平台折腾指南:从HID协议到驱动配置全解析

你手里的DualSense,其实不只是PS5的配件。我这一年多一直在PC、手机、平板甚至Switch上折腾这只手柄,被问得最多的就是:“你不是有PS5吗,怎么打电脑游戏也用这个手柄?”答案很简单——DualSense是我最近两年见过硬件底…

2026/10/15 6:43:49 阅读更多 →
PS5存储扩容与备份实战:M.2固态安装、存档迁移与远程串流调优指南

PS5存储扩容与备份实战:M.2固态安装、存档迁移与远程串流调优指南

我自己折腾 PS5 这几年,最深的体会就是:主机虽然省心,但存储管理、数据备份、远程游玩这些事,官方给的方案总感觉差了那么一口气。存档备份要会员,外接硬盘会被“仅限游玩”限制,换了 M.2 固态之后数据迁移…

2026/10/15 6:43:49 阅读更多 →
Sodium Config API 使用指南:为 Minecraft 视频设置界面注册你自己的 Mod 配置页

Sodium Config API 使用指南:为 Minecraft 视频设置界面注册你自己的 Mod 配置页

图形学游戏开发 【免费下载链接】sodium-fabric A high-performance rendering engine replacement for Minecraft, which greatly improves frame rates and reduces micro-stutter 项目地址: https://gitcode.com/gh_mirrors/so/sodium-fabric 点击查看 免费下载 …

2026/10/15 6:43:49 阅读更多 →

最新新闻

正弦波转方波方案对比:比较器、施密特、运放与专用芯片选型指南

正弦波转方波方案对比:比较器、施密特、运放与专用芯片选型指南

简介:这份PPT资料面向电子工程、测控仪器相关专业的学生与工程师,围绕正弦波转方波这一常见电路设计问题,系统比较了四种实现方案并给出详细电路图。内容以220V/50Hz正弦波转10V/50Hz方波为设计目标,依次讲解由555定时器构成的施密…

2026/10/15 10:14:14 阅读更多 →
无可挑剔执行法:用清单与检查提升工作交付可靠性

无可挑剔执行法:用清单与检查提升工作交付可靠性

1. 项目概述与“impeccable”的重新定义1.1 为什么叫“impeccable”:从词源到执行哲学“Impeccable”这个词,字面意思是“无可挑剔的、完美无瑕的”,但它真正的词源很有意思——拉丁语“peccare”是“犯错”的意思,加上否定前缀“…

2026/10/15 10:14:14 阅读更多 →
SpringBoot整合NapCatQQ实现高效QQ机器人开发

SpringBoot整合NapCatQQ实现高效QQ机器人开发

1. 项目概述:当QQ机器人遇上SpringBoot去年接手公司内部自动化通知系统改造时,我第一次将NapCatQQ与SpringBoot整合。这个组合带来的开发效率提升让我印象深刻——原本需要两周完成的客服机器人原型,用这个方案三天就跑了通。NapCatQQ作为轻量…

2026/10/15 10:14:14 阅读更多 →
从夹逼定理到残差连接:AI模型的边界感、灰度地带与泛化真相

从夹逼定理到残差连接:AI模型的边界感、灰度地带与泛化真相

1. 从夹逼定理说起:为什么AI模型的“边界感”比准确率更重要第一次听到有人把夹逼定理和残差连接放在一起聊,是在一个做数值计算的老哥那里。他当时正在调一个物理仿真模型,发现神经网络在拟合某些函数时,输出值总是会“飘”出理论…

2026/10/15 10:14:14 阅读更多 →
OpenClaw 接入 Qwen 免费层:qwen-portal OAuth 插件启用、设备码认证与模型切换完全指南

OpenClaw 接入 Qwen 免费层:qwen-portal OAuth 插件启用、设备码认证与模型切换完全指南

人工智能大模型LLM 网关AI Agent即时通讯 【免费下载链接】openclaw-zero-token OpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi 项目地址: https://gitcode.com/gh_mirrors/op/openclaw-zero-token…

2026/10/15 10:14:14 阅读更多 →
HDFS面试避坑指南:从NameNode内存到DataNode心跳的实战解析

HDFS面试避坑指南:从NameNode内存到DataNode心跳的实战解析

1. 为什么“HDFS面试基础知识点”这个标题背后藏着一场隐性淘汰赛刚带完一批某高校实验室的分布式系统实训,有个细节让我印象深刻:A同学在模拟面试中被问到“HDFS写入流程里,Client和NameNode交互几次?DataNode之间要不要通信&…

2026/10/15 10:13:13 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →