惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
H
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
L
LINUX DO - 最新话题
A
Arctic Wolf
博客园_首页
S
Securelist
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
N
News and Events Feed by Topic
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
博客园 - 聂微东
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog
罗磊的独立博客
S
Security @ Cisco Blogs
B
Blog
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
S
Schneier on Security
月光博客
月光博客
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
Python中rstrip方法细解
2022-11-09 · via mephisto.cc

昨天编写 Python 程序批量处理 markdown 文件时,遇到一个 rstrip 方法的使用不当的问题,特此记录下。

问题示例:

1    In [1]: a = "dd.md"
2
3    In [2]: b = a.rstrip(".md")
4
5    In [3]: b
6    Out[3]: ''

仔细看上面的输出,一开始我理解的是 a 去掉后缀.md 后,b 的值该为 dd,实际为空,导致程序功能异常,因为需要处理的 markdown 文件很多,还只有部分文件去除后缀的时候异常,后来查阅文档,才发现理解错误。

strip 这个单词,在英文中用作动词时意思为:

to remove, pull, or tear the covering or outer layer from something 翻译为:除去,剥除,撕掉(外皮或表层)

用作名词时:

高级知识分子给翻译为脱衣舞,信达雅只差一个雅,西方世界有脱衣舞的商业表演。

回归正题,在 python 中,类型 bytes 和 str 都包含 lstrip | strip | rstrip 方法,理解一个,其它的原理类似。

  • lstrip 中 l 是 left 左,从左开始处理
  • strip 左右开工,去掉包装外壳,回归本原
  • rstrip 中 r 是 right,从右开始处理

官方文档解释:

str.rstrip([chars])

rstrip 返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空白符(包括空格、换行符、回车符、制表符)。 实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合, 关键就是组合这个字眼, 简单说只要命中在 chars 这个组合中的元素,全部按照方向删除,直到不是为止,官方示例:

1    >>> '   spacious   '.rstrip()
2    '   spacious'
3    >>> 'mississippi'.rstrip('ipz')
4    'mississ'

不带 chars 参数时,右边的空白符被删除了。

带'ipz'参数时,结尾里面凡是在'ipz'这个集合中的的全删了,和顺序、数量无关,请看我的示例:

 1    In [4]: 'mississippi'.rstrip('pzi')
 2    Out[4]: 'mississ'
 3
 4    In [5]: 'mississippi'.rstrip('zip')
 5    Out[5]: 'mississ'
 6
 7    In [6]: 'mississippi'.rstrip('zip')
 8    Out[6]: 'mississ'
 9
10    In [7]: 'mississippi'.rstrip('izip')
11    Out[7]: 'mississ'
12
13    In [8]: 'mississippi'.rstrip('izzizzzppp')
14    Out[8]: 'mississ'
15
16    In [9]: 'mississipppzzzziii'.rstrip('izzizzzppp')
17    Out[9]: 'mississ'

只要在这个 set(chars)中,精准斩杀,毫不含糊,当然前提是你要杀哪边。

这景象,好比一个机器人杀手拿了一把 stirp 砍刀,有人下达了必须砍掉在 chars 死亡笔记中的人员 🤣😅。

回到文章开头的示例:

1    In [11]: 'dd.md'.rstrip(".md")
2    Out[11]: ''

刚好 '.', 'd', 'm'都在死亡名单中,片甲不留,最后值为空。

问题来了,如只是简单要删除单个后缀,而不是全部给定集合中的字符,那么请使用 str.removesuffix() 方法。

  • 官方示例:
1    >>> 'Monty Python'.rstrip(' Python')
2    'M'
3    >>> 'Monty Python'.removesuffix(' Python')
4    'Monty'
  • 我的示例
1    In [13]: 'dd.md'.removesuffix(".md")
2    Out[13]: 'dd'
3
4    In [14]: 'helloword.txt'.removesuffix(".txt")
5    Out[14]: 'helloword'

对应的,removeprefix 方法将删除单个前缀字符串,而不是全部给定集合中的字符:

  • 示例,删除电话号码前面的Tel:
1    In [16]: 'Tel:086-13110119120'.removeprefix("Tel:")
2    Out[16]: '086-13110119120'

本文只是以 rstrip 为例子,其实触类旁通,lstrip,strip,lstrip 三者原理类似,不一一列举,有兴趣的自己试试。

由此可见,实践出真知,细节藏在魔鬼中,多动手多验证才能熟练掌握。