Python string.strip剥离了太多字符

Python string.strip stripping too many characters

本问题已经有最佳答案,请猛点这里访问。

我使用python 3来处理文件名,这是我的代码:

1
2
name = 'movies.csv'
table_name = name.strip(".csv")

表名称的预期值应为"movies",但表名称始终返回"movie"。

为什么要这样做?


strip()从输入字符串中删除与参数字符串中的一个字符匹配的所有前导和尾随字符:

1
2
>>>"abcdefabcdefabc".strip("cba")
'defabcdef'

要使用regex:table_name = re.sub(r"\.csv$","", name)os.path的路径操作函数:

1
2
3
4
5
>>> table_name, extension = os.path.splitext("movies.csv")
>>> table_name
'movies'
>>> extension
'.csv'


我不知道您需要什么,但是如果它检索的是不带扩展名的文件名,那么您可以使用os.path.splitext函数:

1
2
3
4
>>> import os
>>> name, extension = os.path.splitext("movies.csv")
>>> name
'movies'


也许有点晚了,但对于将来阅读本文的人来说,有一种懒惰的方式似乎也可以很好地工作(假设您要从中检索名称的所有文件都是csv文件):

1
2
if name.endswith('.csv'):    
    table_name = name.rstrip("csv").rstrip(".")

如其他解决方案中所述,strip()方法删除所有与括号内字符匹配的前导/尾随字符。因此,这种方法的理念是:

  • 删除csv扩展名-因为存在.,我们知道rstrip()将停止在那里搜索。这将给我们留下movies.串。
  • movies.字符串中删除.rstrip()将只查找尾随的点。
  • 为什么是rstrip():因为我们知道要删除的文本在字符串的末尾,所以可以指定rstrip以更好地控制(即避免无意中删除任何最终的前导c、s或v字符)