2017-06-27 99 views
0

我正在尋找一種方法來刪除基於時期標識符的額外文件。當我拉下一堆報告時,有一些報告具有相同的名稱,但具有獨特的時代。我想刪除前面的一個,只保留目錄中所有文件的最新報告。基於時期標識符刪除相似的名稱文件

前)

  1. file1-1498592006.csv
  2. file1-1498592004.csv

任何幫助,將不勝感激。

+0

我會想象你會採用正則表達式,對嗎? – Connor

+0

正則表達式在這裏矯枉過正。 '''rsp就足夠了。 –

+0

@Coldspeed是的,你說得對,當我第一次看到它時,我誤解了這裏的目標。 – Connor

回答

1

您可以使用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爲此:您將按降序對文件進行排序,以確保只保留最新的報告。

+0

如果只有一個公共文件名,即包含所有「file1」的目錄,這不會起作用嗎?除非我在這裏忽略了這一點,否則將不得不對所有常用文件名進行一些迭代。 – Connor

+0

並非如此。每次遇到_new_文件名時,比如說文件2,該文件將被保留,並且該條目將添加到該集合中。未來的文件2將被確定爲已經存在於該集合中並且將被刪除。 –

+1

首先由「epoch」部分降序排列文件名,這將保證你保存的文件是最新的。 –