web-dev-qa-db-ja.com

python:rstrip正確な1つの文字列、順序を尊重

pythonコマンドrstripを使用して、1つの正確な文字列のみを削除し、すべての文字を個別に取得しないようにすることは可能ですか?

これが起こったとき、私は混乱しました:

>>>"Boat.txt".rstrip(".txt")
>>>'Boa'

私が期待したのは:

>>>"Boat.txt".rstrip(".txt")
>>>'Boat'

どういうわけかrstripを使用して順序を尊重して、2番目の結果を取得できますか?

27
aldorado

間違った方法を使用しています。代わりに str.replace を使用してください:

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

[〜#〜]注[〜#〜]str.replaceは文字列の任意の場所を置き換えます。

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

最後の末尾の.txtのみを削除するには、 regular expression を使用できます。

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

拡張子なしのファイル名が必要な場合は、 os.path.splitext が適切です。

>>> os.path.splitext("Boat.txt")
('Boat', '.txt')
25
falsetru

ヘルパー関数を定義します。

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

または正規表現を使用します:

import re
suffix = ".txt"
s = re.sub(re.escape(suffix) + '$', '', s)
12
nneonneo
>>> 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
Th3carpenter

これは拡張タイプに関係なく機能します。

# 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
chris peckham