ファイル内の特定の形式のすべての行を空白に置き換えようとしています。つまり、number/number/number (日付など) および number:number (時間など) の行を "" に置き換えます。
str.replace
を使用してパターンやフォーマットに一致させることはできません。リテラル文字列のみに一致させてください。
パターンを照合するには、ある種のパーサーが必要です。このようなパターンの場合、標準ライブラリに組み込まれている正規表現エンジンre
は十分強力ですが、パターンの正規表現の書き方を学ぶ必要があります。リファレンス ドキュメントと正規表現 HOWTOは、基本を既に知っている場合に最適です。そうでない場合は、他の場所でチュートリアルを検索する必要があります。
とにかく、これを行う方法は次のとおりです(途中でいくつかの他のことを修正します。それらのほとんどはLego Stormtrooprによって説明されています):
import re
with open("old_text.txt") as old_file, open("new_text.txt", "w") as new_file:
for line in old_file:
cleaned_line = re.sub(r'\d+/\d+/\d+', '', line)
cleaned_line = re.sub(r'\d+:\d+', '', cleaned_line)
new_file.write(cleaned_line)
cleaned_line
また、 2番目に使用したことに注意してくださいsub
。元のコードのように、もう一度使用line
すると、最初の置換の結果が失われます。
あなたの問題の正確な定義を知らなければ、これがまさにあなたが望んでいることを約束することはできません. パターン番号/番号/番号を含むすべての行を空白にし、そのパターン以外のすべての行を空白にし、そのパターンだけを空白にして残りの行をそのままにしますか? これらはすべて を使用して実行可能であり、非常に簡単re
ですが、すべての方法が少し異なります。
少しトリッキーにしたい場合はre.sub
、一度に 1 つずつ繰り返すのではなく、単一の式を使用して、一致するすべての行を一度に空白行に置き換えることができます。これは、正規表現が少し複雑であるのに対し、Python コードが少し単純であることを意味し、おそらく中サイズのファイルではパフォーマンスが向上するが、巨大なファイルではパフォーマンスが低下する (および上限が高くなる) ことを意味します。適切な式を自分で記述する方法がわからず、パフォーマンスのボトルネックを修正する必要がない場合は、明示的なループを使用します。