Так как мы уже изучали инструменты обхода деревьев, задействованные в этом сценарии, перейдем прямо к некоторым примерам его использования. При обработке идентичных деревьев во время обхода выводятся сообщения о состоянии, а в конце появляется сообщение: «No diffs found» (Расхождений не обнаружено):
C:\…\PP4E\System\Filetools> diffall.py C:\temp\PP3E\Examples copytemp > diffs.txt
C:\…\PP4E\System\Filetools> type diffs.txt | more
Comparing C:\temp\PP3E\Examples to copytemp
Directory lists are identical
Comparing contents
README-root.txt matches
Comparing C:\temp\PP3E\Examples\PP3E to copytemp\PP3E
Directory lists are identical
Comparing contents
echoEnvironment.pyw matches
LaunchBrowser.pyw matches
Launcher.py matches
Launcher.pyc matches
…более 2000 строк опущено…
Comparing C:\temp\PP3E\Examples\PP3E\TempParts to copytemp\PP3E\TempParts
Directory lists are identical
Comparing contents
109_0237.JPG matches
lawnlake1-jan-03.jpg matches
part-001.txt matches
part-002.html matches
No diffs found.
При использовании этого сценария я обычно устанавливаю флаг verbose в значение True и перенаправляю вывод в файл (для больших деревьев выводится слишком много информации, которую трудно воспринимать в процессе выполнения сценария). Чтобы ограничить количество сообщений, устанавливайте флаг verbose в значение False. Чтобы посмотреть, как выглядит отчет о расхождениях, нужно их создать. Для простоты я вручную изменил несколько файлов в одном из деревьев, но вы можете воспользоваться сценарием глобального поиска и замены, представленным выше в этой главе. Заодно удалим несколько файлов, чтобы в процессе поиска можно было обнаружить уникальные элементы. Последние две команды удаления из приведенных ниже воздействуют на один и тот же каталог в разных деревьях:
C:\…\PP4E\System\Filetools> notepad copytemp\PP3E\README-PP3E.txt
C:\…\PP4E\System\Filetools> notepad copytemp\PP3E\System\Filetools\commands.py C:\…\PP4E\System\Filetools> notepad C:\temp\PP3E\Examples\PP3E\__init__.py
C:\…\PP4E\System\Filetools> del copytemp\PP3E\System\Filetools\cpall_visitor.py C:\…\PP4E\System\Filetools> del copytemp\PP3E\Launcher.py
C:\…\PP4E\System\Filetools> del C:\temp\PP3E\Examples\PP3E\PyGadgets.py
Теперь перезапустим сценарий сравнения, чтобы обнаружить различия, и перенаправим вывод в файл, чтобы облегчить просмотр результатов. Ниже приведена лишь часть выходного отчета, в которой сообщается о различиях. При обычном использовании я сначала смотрю на сводку в конце отчета, а затем ищу в тексте отчета строки «DIFF» и «unique», если мне нужна дополнительная информация об отличиях, указанных в сводке, — конечно, этот интерфейс можно было бы сделать более дружественным, но мне вполне хватает и этого:
C:\…\PP4E\System\Filetools> diffall.py C:\temp\PP3E\Examples
copytemp > diff2.txt
C:\…\PP4E\System\Filetools> notepad diff2.txt
Comparing C:\temp\PP3E\Examples to copytemp
Directory lists are identical
Comparing contents
README-root.txt matches
Comparing C:\temp\PP3E\Examples\PP3E to copytemp\PP3E
Files unique to C:\temp\PP3E\Examples\PP3E
… Launcher.py
Files unique to copytemp\PP3E
… PyGadgets.py
Comparing contents
echoEnvironment.pyw matches
LaunchBrowser.pyw matches
Launcher.pyc matches
…множество строк опущено…
PyGadgets_bar.pyw matches
README-PP3E.txt DIFFERS
todos.py matches
tounix.py matches
__init__.py DIFFERS
__init__.pyc matches
Comparing C:\temp\PP3E\Examples\PP3E\System\Filetools to copytemp\PP3E\System\ Fil…
Files unique to C:\temp\PP3E\Examples\PP3E\System\Filetools
… cpall_visitor.py
Comparing contents
commands.py DIFFERS
cpall.py matches
…множество строк опущено…
Comparing C:\temp\PP3E\Examples\PP3E\TempParts to copytemp\PP3E\TempParts
Directory lists are identical
Comparing contents
109_0237.JPG matches
lawnlake1-jan-03.jpg matches
part-001.txt matches
part-002.html matches
Diffs found: 5
— unique files at C:\temp\PP3E\Examples\PP3E — copytemp\PP3E
— files differ at C:\temp\PP3E\Examples\PP3E\README-PP3E.txt —
copytemp\PP3E\README-PP3E.txt
— files differ at C:\temp\PP3E\Examples\PP3E\__init__.py — copytemp\PP3E\__init__.py
— unique files at C:\temp\PP3E\Examples\PP3E\System\Filetools — copytemp\PP3E\System\Filetools
— files differ at C:\temp\PP3E\Examples\PP3E\System\Filetools\commands.py — copytemp\PP3E\System\Filetools\commands.py
Я добавил разрывы строк и отступы кое-где, чтобы уместить листинг по ширине страницы, но отчет легко понять. В дереве, насчитывающем 1430 файлов и 185 каталогов, было найдено пять различий — три файла были изменены мною вручную, а два каталога мы рассогласовали тремя командами удаления.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011