I持って次のようにフォルダからファイル名から作成されたリスト:Pythonの比較および削除ファイル
filename_1、filename_2、filename_3 ....
のは、「_」のファイル名である前に、その最初の部分を言ってみましょう番号はバージョンです。私は同じファイル名を持つすべてのファイルを比較し、最高のファイルを保持し、他のフォルダを削除する必要があります。
これまでのところ、フォルダからファイルを読み込み、file_name
とversion
に分割し、ファイル名でリストを作成しました。
import os
version_matching = {}
for path, subdirs, files in os.walk('test'):
print("Entering " + path)
for filename in files:
parts = filename.split('_')
file_name = parts[0]
try:
version = int(parts[1])
except (IndexError, ValueError):
# In case some files don't follow the pattern
print("Skipping " + path + '/' + filename)
continue
if file_name not in version_matching:
# First time we see this file, save the informations
version_matching[file_name] = {"version": version,
"path": path + '/' + filename}
elif version_matching[file_name]["version"] > version:
# We have already seen the file,
# but the one we are handling has a lower version number,
# we delete it
print("Removing " + path + '/' + filename)
os.remove(path + '/' + filename)
else:
# We have already seen the file,
# but this version is more recent,
# we delete the saved one
print("Removing " + version_matching[file_name]["path"])
os.remove(version_matching[file_name]["path"])
# And we update the saved infos
version_matching[file_name]["version"] = version
version_matching[file_name]["path"] = path + '/' + filename
あなたはそれが正しいことを行うことを確認するos.remove
行をコメントアウトすることもできます。ここでは
file_list = []
for path, subdirs, files in os.walk('folder_path'):
for filename in files:
file_version = filename.split('_')
file_name = parts[0]
version = int(parts[1])
file_list.append(filename)
あなたはすばらしいことをやっています。 – Idos
は、ファイル名がキーで、値がバージョンのリストである辞書を使用してください。各キーを見て、リストをソートして古いものを削除することができます。ヒント:dict()。このパターンではsetdefaultが便利なことがよくあります。 –
私は車輪reinventionを避けるためにギルトのバージョンコントロールシステムを学ぶことを提案する: – pepr