Попытка сравнить наш текущий медиа-сервер проекта (dir1) с резервной копией (dir2), чтобы увидеть, какие документы были удалены. Оба являются каталогами Windows. Многие файлы были перетасованы в новые подкаталоги, но не пропали. Поскольку структура каталогов изменилась с использованием recursion и filecmp.dircmp, этот пост не будет работать: Рекурсивное сравнение двух каталогов, чтобы убедиться, что они имеют одинаковые файлы и подкаталоги
Другие соображения заключаются в том, чторазные файлы будут иметь одно и то же имя, поэтому для сравнения потребуется сравнить размер файла, дату изменения и т. д., чтобы определить, совпадают ли два файла.
Что мне нужно sudo-code:
def find_missing_files(currentDir, backup):
<does stuff>
return <List of Files in backup that are not in currentDir>
То, что у меня есть:
def build_file_list(someDir, fileList = []):
for root, dirs, files in os.walk(someDir):
if files:
for file in files:
filePath = os.path.join(root, file)
if filePath not in fileList:
fileList.append(filePath)
return fileList
def cmp_file_lists(dir1, dir2):
dir1List = build_file_list(dir1)
dir2List = build_file_list(dir2)
for dir2file in dir2List:
for dir1file in dir1List:
if filecmp.cmp(dir1file, dir2file):
dir1List.remove(dir1file)
dir2List.remove(dir2file)
break
return (dir1List, dir2List)
РЕДАКТИРОВАТЬ: в приведенном выше коде у меня возникла проблема, из-за которой dir2List.remove (dir2file) выдает ошибку, что dir2file отсутствует в dir2List, потому что (он появляется) как-то и dir2list, иdir1List - это один и тот же объект. Не знаю, как это происходит.
Не знаю, проще ли это сделать с помощью filecmp.dircmp, но мне не хватает этого? или если это лучший подход для достижения того, что я ищу? ... или я должен взять каждый файл у dir2 и у нас из os.walk, чтобы найти его в dir1?