Сканирование дерева каталогов стандартной библиотеки

skanirovanie dereva katalogov standartnoj biblioteki Законченные системные программы

Решение, предложенное в предыдущем разделе, работает, но совершенно очевидно, представляет частичный ответ на поставленный вопрос — файлы с исходными текстами на языке Python обычно располагаются более чем в одном каталоге. Даже стандартная библиотека содержит множество подкаталогов с модулями, которые могут произвольно вкладываться друг в друга. В действительности нам необходимо реализовать обход всего дерева каталогов. Кроме того, в выводе сценария, приведенном выше, не так-то просто разобраться. Исправить эту проблему нам поможет модуль pprint (от «pretty print» — форматированный вывод). Все эти улучшения добавлены в сценарий, представленный в примере 6.2.

Пример 6.2. PP4E\System\Filetools\bigpy-tree.py

Отыскивает наибольший файл с исходным программным кодом на языке Python в дереве каталогов.

Поиск выполняется в каталоге стандартной библиотеки, отображение результатов выполняется с помощью модуля pprint.

import sys, os, pprint trace = False

if sys.platform.startswith(‘win’):

dirname = r’C:\Python31\Lib’ # Windows else:

dirname = ‘/usr/lib/python’ # Unix, Linux, Cygwin

allsizes = []

for (thisDir, subsHere, filesHere) in os.walk(dirname):

if trace: print(thisDir) for filename in filesHere: if filename.endswith(‘.py’): if trace: print(‘…’, filename) fullname = os.path.join(thisDir, filename) fullsize = os.path.getsize(fullname) allsizes.append((fullsize, fullname))

allsizes.sort()

pprint.pprint(allsizes[:2])

pprint.pprint(allsizes[-2:])

Для поиска наибольшего файла с программным кодом на языке Python в дереве каталогов эта версия использует os.walk. Если вы хотите увидеть, как выполняется обход каталогов, измените значение переменной trace. В данной реализации сценарий способен выполнять обход дерева каталогов стандартной библиотеки Python и в Windows, и в Unixподобных системах:

C:\\PP4E\System\Filetools> bigpy-tree.py

[(0, ‘C:\\Python31\\Lib\\build_class.py’),

(0, ‘C:\\Python31\\Lib\\email\\mime\\__init__.py’)]

[(211238, ‘C:\\Python31\\Lib\\decimal.py’),

(380582, ‘C:\\Python31\\Lib\\pydoc_data\\topics.py’)]

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий