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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Модуль 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().

ПОЛУЧЕНИЕ АБСОЛЮТНЫХ ПУТЕЙ

В предыдущем разделе функция glob.glob() возвращала список относительных путей. В первом примере пути имели вид ‘examples\feed.xml’, а во втором относительные пути были даже короче, например, ‘romantest1.py’. Пока вы остаётесь в текущем рабочем каталоге, по этим относительным путям можно будет открывать файлы или получать их метаданные. Но если вы захотите получить абсолютный путь — то есть тот, который включает все имена каталогов до корневого или до буквы диска, вам понадобится функция os.path.realpath().

>>> import os
>>> print(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples
>>> print(os.path.realpath('feed.xml'))
c:\Users\pilgrim\diveintopython3\examples\feed.xml



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 262; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.107.161 (0.005 с.)