Вы сравниваете полные пути к файлам, которые существуют в разных каталогах, потому что, поскольку ваш код теперь стоит, вы выполняете поиск шаблонов WorkSheet_X * и WorkSheet_Y * в текущем рабочем каталоге, который будет отличаться от dir_to_search
( если это не так, я не уверен, в чем смысл этой программы). В любом случае, этот код позволяет текущему рабочему каталогу быть каким-то другим каталогом, кроме dir_to_search
. Таким образом, этот код разделяет полные пути файлов и просто сравнивает имена файлов, а также пытается внести некоторые оптимизации (и исправления в ваш код):
import glob, itertools, os.path
dir_to_search = r'G:\folder'
# Create a set from the list of files to make searching more efficient but use only filename:
files_in_dir = {os.path.split(f)[1] for f in glob.iglob(os.path.join(dir_to_search, '*.xls?'))}
"""
Use itertools.chain to combine calls to rglob.
So rather than building an in-memory list, we are building a generator that
will return the filenames as we need them. This is more efficient if there are a lot of files.
"""
list_of_files = itertools.chain(glob.glob('WorkSheet_X*'), glob.glob('WorkSheet_Y*'))
# but we now must separate the file name from the full path sepcification:
missing_files = [f for f in list_of_files if os.path.split(f)[1] not in files_in_dir]
print(missing_files)
Если мы говорим о действительно большом количестве файлы, составляющие шаблон '*.xls?'
в каталоге dir_to_search
, может быть лучше , а не вообще создать набор files_in_dir
и вместо этого искать каталог для каждого файла-кандидата:
missing_files = [f for f in list_of_files if not os.path.isfile(os.path.join(dir_to_search, os.path.split(f)[1]))]
Однако есть небольшая разница. Предположим, мы нашли файл с именем WorkSheet_X1.csv
, и он существует в каталоге dir_to_search
. Первый метод покажет его как отсутствующий, потому что он не соответствует шаблону *.xls?
. Однако он не будет указан как отсутствующий при использовании второго метода, поскольку он существует в правильном каталоге. Должен ли используемый шаблон глобуса действительно быть 'WorkSheet_X*.xls?'
?