Как читать атрибуты файлов в каталоге?

Например,

import os
print os.listdir()

список файлов в каталоге.

Как получить время изменения файла для всех файлов в каталоге?

Ответ 1

При поиске атрибутов файлов для всех файлов в каталоге и использовании Python 3.5 или новее используйте функцию os.scandir(), чтобы получить список каталогов с объединенными атрибутами файлов. Это потенциально может быть более эффективным, чем использование os.listdir(), а затем извлечение атрибутов файла отдельно:

import os

with os.scandir() as dir_entries:
    for entry in dir_entries:
        info = entry.stat()
        print(info.st_mtime)

Функция DirEntry.stat(), когда она используется в Windows, не требует дополнительных системных вызовов, время изменения файла уже доступно. Данные кэшируются, поэтому дополнительные вызовы entry.stat() не будут выполнять дополнительные системные вызовы.

Вы также можете использовать pathlib модуль Объектно-ориентированные экземпляры, чтобы добиться того же:

from pathlib import Path

for path in Path('.').iterdir():
    info = path.stat()
    print(info.st_mtime)

В более ранних версиях Python вы можете использовать вызов os.stat для получения таких свойств файла, как время модификации.

import os

for filename in os.listdir():
    info = os.stat(filename)
    print(info.st_mtime)

st_mtime - это значение с плавающей запятой на Python 2.5 и выше, представляющее секунды с начала эпохи; используйте модули time или datetime, чтобы интерпретировать их для демонстрации или для других целей.

Обратите внимание, что точность значения зависит от используемой ОС:

Точное значение и разрешение атрибутов st_atime, st_mtime и st_ctime зависят от операционной системы и файловой системы. Например, в системах Windows, использующих файловые системы FAT или FAT32, st_mtime имеет разрешение 2 секунды, а st_atime - разрешение только на 1 день. Подробности смотрите в документации по вашей операционной системе.

Если все, что вы делаете, это получаете время модификации, то метод os.path.getmtime является удобным сочетанием клавиш; он использует метод os.stat под капотом.

Тем не менее, обратите внимание, что вызов os.stat является относительно дорогим (доступ к файловой системе), поэтому, если вы делаете это для большого количества файлов и вам требуется более одного назначения данных на файл, вам лучше использовать os.stat и повторно использовать Возвращается информация, а не используются удобные методы os.path, где os.stat будет вызываться несколько раз для каждого файла.

Ответ 2

Если вы хотите только модифицированное время, то os.path.getmtime(filename) получит его для вас. Если вы используете listdir с аргументом, вам также нужно будет использовать os.path.join:

import os, os.path

for filename in os.listdir(SOME_DIR):
    print os.path.getmtime(os.path.join(SOME_DIR, filename))