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

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

Так, в примере 6.1 приводится первое решение, которое отыскивает наибольший файл Python в ограниченной области, — в одном каталоге, но этого вполне достаточно для начала.

Пример 6.1. PP4E\System\Filetools\bigpy-dir.py

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

Поиск выполняется в каталоге стандартной библиотеки Python для Windows, если в аргументе командной строки не был указан какой-то другой каталог.

import os, glob, sys

dirname = r’C:\Python31\Lib’ if len(sys.argv) == 1 else sys.argv[1]

allsizes = []

allpy = glob.glob(dirname + os.sep + ‘*.py’) for filename in allpy:

filesize = os.path.getsize(filename) allsizes.append((filesize, filename))

allsizes.sort()

print(allsizes[:2])

print(allsizes[-2:])

Для обхода файлов в каталоге этот сценарий использует модуль glob. Он определяет размеры и имена файлов и сохраняет информацию в списке, который затем сортируется. Поскольку размер является первым элементом кортежей, помещаемых в список, список будет отсортирован по размерам файлов, вследствие чего информация о наибольшем файле окажется в конце списка. Вместо того чтобы сохранять весь список, можно было бы сохранять только текущий наибольший файл, но решение со списком выглядит более гибким. Сценарий сканирует каталог стандартной библиотеки Python в Windows, если в аргументе командной строки ему не был передан другой каталог, и выводит информацию о наибольшем и наименьшем файлах, обнаруженных им:

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

[(0, ‘C:\\Python31\\Lib\\build_class.py’), (56, ‘C:\\Python31\\Lib\\struct.py’)] [(147086, ‘C:\\Python31\\Lib\\turtle.py’), (211238, ‘C:\\Python31\\Lib\\decimal.py’)]

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

[(21, ‘.\\__init__.py’), (461, ‘.\\bigpy-dir.py’)]

[(1940, ‘.\\bigext-tree.py’), (2547, ‘.\\split.py’)]

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

[(21, ‘..\\__init__.py’), (29, ‘..\\testargv.py’)]

[(541, ‘..\\testargv2.py’), (549, ‘..\\more.py’)]

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

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