我有一个从文件夹中的文件名创建的列表,如下所示:
filename_1,filename_2,filename_3 ....
让我们说第一部分" _"是版本后的文件名和编号。我需要比较具有相同文件名的所有文件,保持文件最高并从文件夹中删除其他文件。
到目前为止,我已设法从文件夹加载文件,拆分为file_name
和version
并创建包含文件名的列表。
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)
答案 0 :(得分:1)
以下是实现您所寻找内容的代码段:
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
行,以确保它能正常运行。
我使用字典来存储具有最高版本号的文件的信息,每次找到具有相同名称的文件时,我都会比较版本号并删除旧文件。
另请注意,代码不会损坏不遵循指定模式(.*_[0-9]*
)的文件。
希望它会有所帮助。