Python比较和删除文件

时间:2016-05-31 08:32:00

标签: python python-3.x

我有一个从文件夹中的文件名创建的列表,如下所示:

filename_1,filename_2,filename_3 ....

让我们说第一部分" _"是版本后的文件名和编号。我需要比较具有相同文件名的所有文件,保持文件最高并从文件夹中删除其他文件。

到目前为止,我已设法从文件夹加载文件,拆分为file_nameversion并创建包含文件名的列表。

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)

1 个答案:

答案 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]*)的文件。

希望它会有所帮助。