从文件名的特定列表中删除大量文件(python)

时间:2018-12-05 13:51:58

标签: python

我需要从包含其名称的列表中删除大量文件(我需要从10015个文件中删除2450个文件)。但是我正在使用的代码虽然可以正常工作,但是却太耗时了。绝对没有优化它以更快地完成工作。 有谁有更好的主意来解决这个问题?

os.chdir(directoryPath)
for filename in os.listdir('D:\Python\Jupyter\IP_Project\DataBase'):
    for pattern in ['ISIC_0024396*', 'ISIC_0024630*', 'ISIC_0024672*', 
                    'ISIC_0024700*', 'ISIC_0024771*', 'ISIC_0024834*', 
                    'ISIC_0024869*', 'ISIC_0024918*', 'ISIC_0024962*', 
                    'ISIC_0024998*', 'ISIC_0025005*', 'ISIC_0025040*', 
                    'ISIC_0025046*', 'ISIC_0025064*', 'ISIC_0025073*', 
                    'ISIC_0025112*', 'ISIC_0025152*', 'ISIC_0025168*', 
                    'ISIC_0025170*', 'ISIC_0025193*', 'ISIC_0025208*', 
                    'ISIC_0025231*', 'ISIC_0025297*', 'ISIC_0025322*',
                    'ISIC_0034319*', 'ISIC_0034320*']:
        if fnmatch.fnmatch(filename, pattern):
             os.remove(filename)

注意:我减少了上面代码中的文件名数量,以更好地体现我的想法。但是正如我上面所说,这些是2450个文件名。

感谢提示!

2 个答案:

答案 0 :(得分:1)

正如我在上面的评论中所述,在找到第一个匹配项之后,您目前仍在继续检查是否有其他匹配项,即使在这种情况下您也不会这样做,并且由于该文件已被删除,通过在匹配:

os.chdir(directoryPath)
for filename in os.listdir('D:\Python\Jupyter\IP_Project\DataBase'):
    for pattern in ['ISIC_0024396*', 'ISIC_0024630*', 'ISIC_0024672*', 
                    'ISIC_0024700*', 'ISIC_0024771*', 'ISIC_0024834*', 
                    'ISIC_0024869*', 'ISIC_0024918*', 'ISIC_0024962*', 
                    'ISIC_0024998*', 'ISIC_0025005*', 'ISIC_0025040*', 
                    'ISIC_0025046*', 'ISIC_0025064*', 'ISIC_0025073*', 
                    'ISIC_0025112*', 'ISIC_0025152*', 'ISIC_0025168*', 
                    'ISIC_0025170*', 'ISIC_0025193*', 'ISIC_0025208*', 
                    'ISIC_0025231*', 'ISIC_0025297*', 'ISIC_0025322*',
                    'ISIC_0034319*', 'ISIC_0034320*']:
        if fnmatch.fnmatch(filename, pattern):
             os.remove(filename)
             break # break now that we matched and move on to next file

从理论上讲,您将处理所有这些文件所需的时间减少了大约一半(假设每个模式的名称分布均匀)

答案 1 :(得分:1)

感谢大家的提示。 对于我的问题,我可以按照指示直接删除文件,从而以一种更简单的方式解决该问题。

os.chdir(directory_path)
    for filename in repeated_images:
    os.remove(filename)