2017-11-12 10 views
0

リリースの種類別にソートされた上位2つのファイルとバージョンIDだけが保持されるように、アーカイブフォルダをクリーンアップする必要があります。フォルダ内のファイルをソート

ファイル名をリストに壊してoperator.itemgetterで試しましたが、複数回ソートするのはコストのかかる操作です。

例:

1.0.0-release-735586.zip 1.0.0-release-447088.zip 1.0.0-release-436044.zip 1.0.1-patch-480506.zip 1.0.1-patch-968125.zip 1.0.1-patch-532147.zip

1.0.0-release-735586.zip 1.0.0-release-447088.zip 1.0.1-patch-968125.zip 1.0.1-patch-532147.zip

+0

使用GROUPBY、その後、ソート – Elazar

答えて

1

使用itertoolsgroupbysortedすなわち

from itertools import groupby 
li = ['1.0.0-release-735586.zip', '1.0.0-release-447088.zip', '1.0.0-release-436044.zip', 
'1.0.1-patch-480506.zip', '1.0.1-patch-968125.zip', '1.0.1-patch-532147.zip'] 

new= [] 
for key, group in groupby(li, lambda x: x[:-10]): 
    new.extend(sorted(list(group),reverse=True)[:2]) 

Hでなければなりません最後に10文字を除外してリスト要素をグループ化することができます。つまり、'1.0.0-release-735586.zip'[:-10]'1.0.0-release-'となります。

すべてのグループについて、最初の2つの要素だけを降順でソートしています。 sorted[:2]

new 
['1.0.0-release-735586.zip', 
    '1.0.0-release-447088.zip', 
    '1.0.1-patch-968125.zip', 
    '1.0.1-patch-532147.zip'] 
+0

ソリューションによって行われる罰金ですが、あなたは正確に2行目に何が起こるか説明できますか?グループオブジェクトのソートされたリストでリストを拡張しています。 reverse = Trueは、ASC順にソートしています。しかし、[:2]の意味は要素0と1を取りますか? – nimish

+0

私は答えを編集しました。いくつかの洞察を与えることを願っています。 ;) – Dark

関連する問題