На этом шаге мы рассмотрим дополнительные функции, предназначенные для работы с файлами.
Модуль os.path содержит дополнительные функции, позволяющие проверить наличие файла, получить размер файла и др. Опишем эти функции:
>>> import os.path >>> os.path.exists(r"file.txt"), os.path.exists(r"file2.txt") (True, False) >>> os.path.exists(r"C:\book"), os.path.exists(r"C:\book2") (True, False)
Начиная с Python 3.3, в качестве параметра можно передать целочисленный дескриптор открытого файла, возвращенный функцией open() из того же модуля os;
>>> os.path.getsize (r"file.txt") # Файл существует 18 >>> os.path.getsize (r"file2.txt") # Файл не существует Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> os.path.getsize (r"file2.txt") # Файл не существует File "C:\Python34\lib\genericpath.py", line 50, in getsize return os.stat(filename).st_size FileNotFoundError: [WinError 2] Не удается найти указанный файл: 'file2.txt'
>>> import time # Подключаем модуль time >>> t = os.path.getatime (r"file.txt") >>> t 1526646102.8786 >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '18.05.2018 17:21:42'
>>> t = os.path.getctime (r"file.txt") >>> t 1526646102.8786 >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '18.05.2018 17:21:42'
>>> t = os.path.getmtime (r"file.txt") >>> t 1533803030.709 >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '09.08.2018 13:23:50'
Получить размер файла и время создания, изменения и доступа к файлу, а также значения других метаданных позволяет функция stat() из модуля os. В качестве значения функция возвращает объект stat_result, содержащий десять атрибутов: st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime и st_ctime. Пример использования функции stat():
>>> import os, time >>> s = os.stat(r"file.txt") >>> s os.stat_result(st_mode=33206, st_ino=205195258022237095, st_dev=2148157263, st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1526646102, st_mtime=1533803030, st_ctime=1526646102) >>> s.st_size # Размер файла 18 >>> t = s.st_atime # Время последнего доступа к файлу >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '18.05.2018 17:21:42' >>> t = s.st_ctime # Время создания файла >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '18.05.2018 17:21:42' >>> t = s.st_mtime # Время последнего изменения файла >>> time.strftime("%d.%m.%Y %H:%M:%S", time.localtime (t) ) '09.08.2018 13:23:50'
Обновить время последнего доступа и время изменения файла позволяет функция utime() из модуля os. Функция имеет два варианта формата:
utime(<Путь к файлу>, None)
utime(<Путь к файлу>, (<Последний доступ>, <Изменение файла>))
Начиная с Python 3.3, в качестве первого параметра можно указывать не только строковый путь, но и целочисленный дескриптор открытого файла, возвращенный функцией open() из модуля os. Если в качестве второго параметра указано значение None, то время доступа и изменения файла будет текущим. Во втором варианте формата функции utime() указывается кортеж из новых значений в виде количества секунд, прошедших с начала эпохи. Если файл не существует, возбуждается исключение OSError. Пример использования функции utime():
>>> import os, time >>> os.stat (r"file.txt") # Первоначальные значения os.stat_result(st_mode=33206, st_ino=205195258022237095, st_dev=2148157263, st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1526646102, st_mtime=1533803030, st_ctime=1526646102) >>> t = time.time () - 600 >>> os.utime (r"file.txt", (t, t)) # Текущее время минус 600 сек >>> os.stat (r"file.txt") os.stat_result(st_mode=33206, st_ino=205195258022237095, st_dev=2148157263, st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1535547659, st_mtime=1535547659, st_ctime=1526646102) >>> os.utime (r"file.txt", None) # Текущее время >>> os.stat (r"file.txt") os.stat_result(st_mode=33206, st_ino=205195258022237095, st_dev=2148157263, st_nlink=1, st_uid=0, st_gid=0, st_size=18, st_atime=1535548480, st_mtime=1535548480, st_ctime=1526646102)
На следующем шаге мы рассмотрим преобразование пути к файлу или каталогу.