Python string.strip剥离太多字符[重复]
Posted
技术标签:
【中文标题】Python string.strip剥离太多字符[重复]【英文标题】:Python string.strip stripping too many characters [duplicate] 【发布时间】:2013-12-16 20:35:45 【问题描述】:我正在使用 Python 3 处理文件名,这是我的代码:
name = 'movies.csv'
table_name = name.strip(".csv")
table_name 的预期值应该是“movies”,但 table_name 一直返回“movie”。
为什么要这样做?
【问题讨论】:
From docs: :str.strip([chars])
chars 参数不是prefix 或suffix;相反,它的值的所有组合都被剥离了
多么不方便和不直观
显然我多年来一直在滥用这个功能。我有点震惊。为什么!?
【参考方案1】:
strip()
从输入字符串中删除所有与参数字符串中的字符之一匹配的前导和尾随字符:
>>> "abcdefabcdefabc".strip("cba")
'defabcdef'
您想使用正则表达式:table_name = re.sub(r"\.csv$", "", name)
或 os.path
s 路径操作函数:
>>> table_name, extension = os.path.splitext("movies.csv")
>>> table_name
'movies'
>>> extension
'.csv'
【讨论】:
【参考方案2】:可能有点晚了,但对于那些以后阅读这篇文章的人来说,有一种懒惰的方式似乎也可以正常工作(假设您要从中检索名称的所有文件都是 CSV 文件):
if name.endswith('.csv'):
table_name = name.rstrip("csv").rstrip(".")
正如在其他解决方案中所说,strip()
方法会删除与括号内的字符匹配的所有前导/尾随字符。因此,这种方法的想法是:
-
删除
csv
扩展 - 因为有一个 .
我们知道 rstrip()
将停止在那里搜索。这将为我们留下movies.
字符串。
从movies.
字符串中删除.
- rstrip()
将只查找尾随点。
为什么rstrip()
:由于我们知道要删除的文本在字符串的末尾,我们可以指定rstrip
以获得更好的控制(即避免无意中删除任何最终的前导c、s 或 v 字符)
【讨论】:
这也会删除其他扩展名,例如.c
或.css
很公平,我认为这些文件都是 .csv。如果不是这种情况,一个简单的if name.endswith('.csv')
之前应该可以解决它。【参考方案3】:
我不知道你需要什么,但如果它正在检索没有扩展名的文件名,你有 os.path.splitext
function:
>>> import os
>>> name, extension = os.path.splitext("movies.csv")
>>> name
'movies'
【讨论】:
以上是关于Python string.strip剥离太多字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章