Так, в примере 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