pythonコマンドrstrip
を使用して、1つの正確な文字列のみを削除し、すべての文字を個別に取得しないようにすることは可能ですか?
これが起こったとき、私は混乱しました:
>>>"Boat.txt".rstrip(".txt")
>>>'Boa'
私が期待したのは:
>>>"Boat.txt".rstrip(".txt")
>>>'Boat'
どういうわけかrstripを使用して順序を尊重して、2番目の結果を取得できますか?
間違った方法を使用しています。代わりに 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')
ヘルパー関数を定義します。
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)
>>> 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'
>>>
これは拡張タイプに関係なく機能します。
# 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))