【问题标题】:lstrip and rstrip not removing in python 3? [duplicate]lstrip 和 rstrip 没有在 python 3 中删除? [复制]
【发布时间】:2021-06-22 23:08:41
【问题描述】:

我觉得我有一段非常简单的代码。我有一个格式为'stuff_category.csv' 的文件名。我正在尝试删除'stuff_''.csv',以便留下'category',这是下一段代码所需要的。 'stuff_' 可以是很多不同的东西,所以我不能使用 replace() 函数。现在我有

filename = "stuff_category.csv"
category = filename.lstrip('_').rstrip('.')

但是如果我尝试print(category),甚至print(category.lstrip('_')),它只会返回原始文件名。我错过了什么?

【问题讨论】:

  • 您错过了阅读有关 .lstrip().rstrip() 工作原理的文档。
  • 如果您想提取基本名称和/或文件扩展名,请使用os.path.splitext(filename),它会返回 ('stuff_category', '.csv')。
  • @MarkTolonen 我没有“错过”它,我想我只是误解了它的工作原理。当给 lstrip() 一个参数时,我看到的所有内容都会删除该参数之前的所有内容。
  • 我发现 'filename.split('.')[0].split('_')[-1]' 产生了我正在寻找的结果。它不像我希望的那样漂亮,但它完成了工作。
  • @user2954167 链接的官方文档给出了它如何工作的清晰示例。

标签: python python-3.x string strip


【解决方案1】:

您可以使用 removeprefixremovesuffix (Python 3.9) 而不是 lstriprstrip em>:

filename = "stuff_category.csv"
print(filename.removeprefix('stuff_').removesuffix('.csv')) #category

或者使用 Slicingstartswith endswith (Python 3.8):

start = "stuff_"
end = ".csv"
if filename.startswith(start):
    filename = filename[len(start):]
if filename.endswith(end):
    filename = filename[:-len(end)]
print(filename) #category

或者甚至使用 Slicingindex

print(filename[filename.index('_')+1:filename.index('.')]) #category

【讨论】:

    【解决方案2】:

    您缺少这些方法的 documentation。他们不使用提供的字符作为分隔符,他们像子字符串一样删除字符。

    lstrip(self, chars=None, /) 返回删除前导空格的字符串副本。 如果给出了 chars 而不是 None,则改为删除 chars 中的字符。

    试试这个:

    filename = "stuff_category.csv"
    category = filename.lstrip('stuff_').rstrip('.csv')
    

    如果"stuff_" 不是常量,请考虑使用正则表达式或str.split 而不是lstrip/rstrip

    【讨论】:

    • 您的示例也不是真正的工作方式。例如,.lstrip('stuff_') 从右侧删除 s、t、u、f 和 _ 的所有 组合,因此 "stuff_futs_category".lstrip('stfu_') 将返回 "category"
    • Python 3.9 引入了removeprefixremovesuffix 方法,这些方法可以做每个人在意识到错误之前一直认为lstriprstrip 会做的事情。
    • @MarkTolonen 感谢您的更正
    • @user2357112supportsMonica 这里指出了str.removeprefixstr.removesuffix 方法,如果不使用3.9,它们很容易OP 实现
    • @user2954167,一定要尝试除剥离方法之外的其他方法。由于上述原因,在这种情况下它们可能会产生错误。
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 2021-12-07
    • 1970-01-01
    • 2011-07-01
    • 2011-01-08
    • 2019-01-30
    • 2021-02-14
    • 2023-03-29
    相关资源
    最近更新 更多