Шаг 90.
Python: сборник рецептов.
Файлы и ввод-вывод. Проверка существования файла

    На этом шаге мы продолжим знакомство с модулем os.path.

Задача

    Вам нужно выяснить, существует ли файл или каталог.

Решение

    Используйте os.path, чтобы проверить, существует ли файл или каталог. Например:

>>> import os
>>> os.path.exists('/etc/passwd')
True
>>> os.path.exists('/tmp/spam')
False
>>>

    Вы можете выполнить дополнительные тесты, чтобы проверить тип файла. Эти проверки возвращают False, если файл не существует:

>>> # Это обычный файл?
>>> os.path.isfile('/etc/passwd')
True
>>> # Это каталог?
>>> os.path.isdir('/etc/passwd')
False
>>> # Это символическая ссылка?
>>> os.path.islink('/usr/local/bin/python3')
True
>>> # Получить прилинкованный файл
>>> os.path.realpath('/usr/local/bin/python3')
'/usr/local/bin/python3.3'
>>>

    Если вам нужно получить метаданные (например, размер или дату изменения файла), это тоже можно сделать с помощью модуля os.path:

>>> os.path.getsize('/etc/passwd')
3669
>>> os.path.getmtime('/etc/passwd')
1272478234.0 
>>> import time
>>> time.ctime(os.path.getmtime('/etc/passwd'))
'Wed Apr 28 13:10:34 2010'


Обсуждение

    Проверка файлов с помощью os.path становится очень простой операцией. Единственное, о чем стоит помнить, - так это о разрешениях, особенно при операциях получения метаданных. Например:

>>> os.path.getsize('Users/guido/Desktop/foo.txt')
Traceback (most recent call last):
 .   .   .   .
PermissionError: [Errno 13] Permission denied: '/Users/guido/Desktop/foo.txt'
>>>

    На следующем шаге мы рассмотрим получение содержимого каталога.




Предыдущий шаг Содержание Следующий шаг