python: rstrip one exact string, respecting order

前端 未结 6 2090
挽巷
挽巷 2020-12-16 09:16

Is it possible to use the python command rstrip so that it does only remove one exact string and does not take all letters separately?

I was confused w

相关标签:
6条回答
  • 2020-12-16 09:57

    Define a helper function:

    def strip_suffix(s, suf):
        if s.endswith(suf):
            return s[:len(s)-len(suf)]
        return s
    

    or use regex:

    import re
    suffix = ".txt"
    s = re.sub(re.escape(suffix) + '$', '', s)
    
    0 讨论(0)
  • 2020-12-16 09:58

    You're using wrong method. Use str.replace instead:

    >>> "Boat.txt".replace(".txt", "")
    'Boat'
    

    NOTE: str.replace will replace anywhere in the string.

    >>> "Boat.txt.txt".replace(".txt", "")
    'Boat'
    

    To remove the last trailing .txt only, you can use regular expression:

    >>> import re
    >>> re.sub(r"\.txt$", "", "Boat.txt.txt")
    'Boat.txt'
    

    If you want filename without extension, os.path.splitext is more appropriate:

    >>> os.path.splitext("Boat.txt")
    ('Boat', '.txt')
    
    0 讨论(0)
  • 2020-12-16 10:00

    In Python 3.9, as part of PEP-616, you can now use the removeprefix and removesuffix functions:

    >>> "Boat.txt".removeprefix("Boat")
    >>> '.txt'
    
    >>> "Boat.txt".removesuffix(".txt")
    >>> 'Boat'
    
    0 讨论(0)
  • 2020-12-16 10:04

    In addition to the other excellent answers, sometimes rpartiton may also get you there (depends on the exact usecase).

    >> "Boat.txt".rpartition('.txt')
    ('Boat', '.txt', '')
    
    >> "Boat.txt".rpartition('.txt')[0]
    'Boat'
    
    0 讨论(0)
  • 2020-12-16 10:09

    This will work regardless of extension type.

    # Find the rightmost period character
    filename = "my file 1234.txt"
    
    file_extension_position = filename.rindex(".")
    
    # Substring the filename from first char up until the final period position
    stripped_filename = filename[0:file_extension_position]
    print("Stripped Filename: {}".format(stripped_filename))
    
    0 讨论(0)
  • 2020-12-16 10:20
    >>> myfile = "file.txt"
    >>> t = ""
    >>> for i in myfile:
    ...     if i != ".":
    ...             t+=i
    ...     else:
    ...             break
    ... 
    >>> t
    'file'
    >>> # Or You can do this
    >>> import collections
    >>> d = collections.deque("file.txt")
    >>> while True:
    ...     try:
    ...             if "." in t:
    ...                     break
    ...             t+=d.popleft()
    ...     except IndexError:
    ...             break
    ...     finally:
    ...             filename = t[:-1]
    ... 
    >>> filename
    'file'
    >>> 
    
    0 讨论(0)
提交回复
热议问题