将文件列表与文件夹中的文件进行比较

2024-05-16 19:46:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件名列表,但在目录中它们的名称有点不同。我想打印不在目录中的文件名。文件示例:

FOO_BAR_524B_023D9B01_2021-157T05-34-31__00001_2021-08-30T124702.130.tgz

import os
missing = ['FOO_BAR_524B_023D9B01_2021-157T05-34-31__00001', 'dfiknvbdjfhnv']
for fileName in missing:
    for fileNames in next(os.walk('C:\\Users\\foo\\bar'))[2]:
        if fileName not in fileNames:
            print(fileName)

我不能理解我做错了什么


Tags: 文件in目录名称示例列表forfoo
1条回答
网友
1楼 · 发布于 2024-05-16 19:46:15

问题是您迭代目录(for fileNames in next(os.walk(...))[2])中的每个文件,并检查fileName是否在每个文件名中。对于文件夹中打印fileName not in fileNames的每个文件,fileName会导致多次打印

只需执行一次检查,查看文件夹中的所有文件是否都不包含目标文件名,即可解决此问题

import os
missing = ['FOO_BAR_524B_023D9B01_2021-157T05-34-31__00001', 'dfiknvbdjfhnv']
fileNames = next(os.walk('C:\\Users\\foo\\bar'))[2]
for missingfileName in missing:
    if all(missingfileName not in fileName for fileName in fileNames):
        print(missingfileName)

如果您希望它更高效,并且只查找作为其他名称前缀的文件名,那么可以使用名为trie的数据结构。例如,如果missing等于['bcd'],并且有一个名为abcde的文件,并且这些文件被认为不匹配,那么trie在这里是合适的

相关问题 更多 >