エポック識別子に基づいて余分なファイルを削除する方法を探しています。私がたくさんのレポートを取り上げると、同じ名前のレポートがいくつかありますが、独自のエポックがあります。以前のファイルを削除して、ディレクトリ内のすべてのファイルについて最新のレポートを残したいと思います。エポック識別子に基づく類似の名前ファイルの削除
EX)
- file1-1498592006.csv
- file1-1498592004.csv
任意の助けいただければ幸いです。
エポック識別子に基づいて余分なファイルを削除する方法を探しています。私がたくさんのレポートを取り上げると、同じ名前のレポートがいくつかありますが、独自のエポックがあります。以前のファイルを削除して、ディレクトリ内のすべてのファイルについて最新のレポートを残したいと思います。エポック識別子に基づく類似の名前ファイルの削除
EX)
任意の助けいただければ幸いです。
すでに見たファイル名を追跡するには、set
を使用します。重複を削除することができます。
seen = set()
for file in sorted(os.listdir('/path/to/your/reports'), reverse=True):
filename = file.rsplit('-', 1)[0]
if filename not in seen:
seen.add(filename)
else:
os.unlink(file)
os.unlink
を使用して追加情報を削除できます。
@Błotosmętekありがとうございます。ファイルを降順で並べ替えると、最新のレポートのみが保持されます。
共通ファイル名が1つしかない場合、つまり「file1」がすべて含まれているディレクトリが1つしかない場合にのみ動作しますか?私がここでポイントを逃していない限り、私が思う共通のファイル名のすべてを通して何度か反復する必要があります。 – Connor
そうではありません。 _new_ファイル名、つまりfile-2になるたびに、そのファイルが保持され、そのエントリがセットに追加されます。将来のファイル-2はすでにセットに存在すると判断され、削除されます。 –
最初にファイル名を「エポック」部分を降順に並べ替えます。保存するファイルが最新のものであることが保証されます。 –
正規表現を採用していると思いますか? – Connor
正規表現はここでは正規表現です。 '-'のrsplitで十分です。 –
@Coldspeedええ、あなたが正しいです、私は最初にそれを読むときにここでの目標を誤解しました。 – Connor