【问题标题】:python 3 remove leading substring from string [duplicate]python 3从字符串中删除前导子字符串[重复]
【发布时间】:2019-09-10 13:30:31
【问题描述】:

假设我有一个文件名./file,我想删除前导./(如果它以./ 开头)。最好的python方法是什么?我的看法是:

if filename.startswith("./"):
  # remove leading ./
  filename = filename[2:]

没有更优雅的方式吗?

PS:只有在完全匹配的情况下才应该删除前导部分,请考虑以下文件名:

./filename
.configfile
../file
./.configfile

【问题讨论】:

  • new_list = [element.replace("./", "") for element in old_list]
  • @OlvinR​​oght 这也将替换“../”的一部分......
  • @Itay,如果需要,您可以添加if element.startswith(".\")。这只是快速评论,而不是回答,感受差异
  • 你可以简单地使用regex:re.sub(r'^./', '', file)

标签: python python-3.x substring


【解决方案1】:
filenames = ['.configfile', './file1', './dir/file2']
filenames = [fn[2:] if fn.startswith("./") else fn for fn in filenames]

借鉴你的想法,但在一行中完成

【讨论】:

    【解决方案2】:

    我个人的偏好是@user1443098 的解决方案 但是为了完成 - 使用 re

    import re
    
    pattern = re.compile(r'^\./')
    files = ['./filename', '.configfile', '../file']
    new_files = [re.sub(pattern, '', fname) for fname in files]
    print(new_files)
    

    【讨论】:

      【解决方案3】:

      你做它的方式就是它通常做的方式。当然,你总是可以把它移到一个函数中:

      def remove_prefix(s, prefix):
          if s.startswith(prefix):
              s = s[len(prefix):]
          return s
      

      【讨论】:

        【解决方案4】:

        我会考虑写一个辅助函数:

        def strip_prefix(s, prefix):
          if s.startswith(prefix):
            return s[len(prefix):]
          else:
            return s
        
        print(strip_prefix('./filename', './'))
        print(strip_prefix('.configfile', './'))
        print(strip_prefix('../file', './'))
        

        【讨论】:

          【解决方案5】:

          假设您使用的是 python3,处理路径的最佳方法是通过pathlibmodule

          如果你只想要文件名

          from pathlib import Path
          paths = ["./filename", ".configfile", "../file"]
          only_filenames = [Path(f).name for f in paths]
          

          【讨论】:

          • 这不是问题要问的,只有与./ 完全匹配的内容应该被删除,../ 之类的内容应该保持不变。没有地方说只需要文件名
          【解决方案6】:
          if filename.startswith("./"):
              filename.lstrip("./")
          

          【讨论】:

          • 那会搞砸./.configfile
          • 此外,如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
          猜你喜欢
          • 2018-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          • 2018-04-01
          • 2016-08-29
          • 2018-06-09
          相关资源
          最近更新 更多