Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Получение содержимого каталога

Модуль glob — это ещё один инструмент из стандартной библиотеки Python. Это простой способ программно получить содержимое папки, а также он умеет использовать символы-джокеры, с которыми вы наверняка знакомы, если работали в командной строке.

>>> os.chdir('/Users/pilgrim/diveintopython3/') >>> import glob >>> glob.glob('examples/*.xml') ['examples\\feed-broken.xml',  'examples\\feed-ns0.xml',  'examples\\feed.xml']  (1) >>> os.chdir('examples/')  (2) >>> glob.glob('*test*.py') ['alphameticstest.py',  'pluraltest1.py',  'pluraltest2.py',  'pluraltest3.py',  'pluraltest4.py',  'pluraltest5.py',  'pluraltest6.py',  'romantest1.py',  'romantest10.py',  'romantest2.py',  'romantest3.py',  'romantest4.py',  'romantest5.py',  'romantest6.py',  'romantest7.py',  'romantest8.py',  'romantest9.py']  (3)

1. ↑ Модуль glob принимает шаблон, содержащий символы-джокеры, и возвращает пути всех файлов и каталогов, соответствующих ему. В этом примере шаблон содержит путь к каталогу и “*.xml”, которому будут соответствовать все xml-файлы в каталоге examples.  2. ↑ Теперь сделаем текущим рабочим каталог examples. Функция os.chdir() может принимать и относительные пути.  3. ↑ Вы можете использовать несколько символов-джокеров в своём шаблоне. Этот пример находит все файлы в текущем рабочем каталоге, заканчивающиеся на .py и содержащие слово test где-нибудь в имени файла.

Получение сведений о файле

Любая современная операционная система хранит сведения о каждом файле (метаданные): дата создания, дата последней модификации, размер файла и т. д. Python предоставляет единый программный интерфейс для доступа к этим метаданным. Вам не надо открывать файл; всё, что требуется — имя файла.

>>> import os >>> print(os.getcwd()) c:\Users\pilgrim\diveintopython3\examples  (1) >>> metadata = os.stat('feed.xml')  (2) >>> metadata.st_mtime 1247520344.9537716  (3) >>> import time  (4) >>> time.localtime(metadata.st_mtime) time.struct_time(tm_year=2009, tm_mon=7, tm_mday=13, tm_hour=17, tm_min=25,                  tm_sec=44, tm_wday=0, tm_yday=194, tm_isdst=1)  (5)

1. Текущий рабочий каталог — папка с примерами.  2. feed.xml — файл в папке с примерами. Вызов функции os.stat() возвращает объект, содержащий различные метаданные о файле.  3. st_mtime — время изменения файла, но записано оно в ужасно неудобном формате. (Фактически это количество секунд, прошедших с начала «эры UNIX», начавшейся в первую секунду 1 января 1970 года. Серьёзно.)  4. Модуль time является частью стандартной библиотеки Python. Он содержит функции для преобразований между различными форматами представления времени и часовыми поясами, для преобразования их в строки (str) и др.  5. Функция time.localtime() преобразует время из формата «секунды с начала эры» (поле st_mtime, возвращённое функцией os.stat()) в более удобную структуру, содержащую год, месяц, день, час, минуту, секунду и т. д. Этот файл в последний раз изменялся 13 июля 2009 года, примерно в 17 часов, 25 минут.

# продолжение предыдущего примера >>> metadata.st_size 3070 >>> import humansize (1) >>> humansize.approximate_size(metadata.st_size) '3.0 KiB'  (2)

1. ↑ Функция os.stat() также возвращает размер файла в свойстве st_size. Размер файла feed.xml — 3070 байт.  2. ↑ Вы можете передать свойство st_size в функцию approximate_size().