Получить дату последней модификации диска в Python

Я пытаюсь получить дату последней модификации USB-накопителя в Python. Мне известно о os.path.getmtime() и os.stat(), но они работают только на папки и файлы. Когда я запускаю os.path.getmtime() по корневому пути USB-накопителя, я получаю либо «Пн, 31 декабря, 23:00:00 1979» (в Windows 7), либо дату в 1970 году (в Linux).

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

Мне это нужно, потому что я пишу сценарий, который требует, чтобы файлы и папки на USB-накопителе были проиндексированы в базе данных. Это может занять некоторое время, если элементов много, поэтому я хочу переиндексировать содержимое только в том случае, если оно изменилось с тех пор, как диск в последний раз использовался сценарием.

Редактировать : сценарий воспроизводит аудиофайлы (с USB-накопителя или из другого места), которые, скорее всего, не изменятся. Что действительно важно, так это проверить, изменилось ли содержимое диска (были ли добавлены или удалены аудиофайлы и папки). Содержимое индексируется сценарием, потому что для создания списков воспроизведения требуется уникальный идентификатор для каждого файла (на USB-накопителе или нет).

Заранее спасибо за помощь.


person GuitarExtended    schedule 06.05.2015    source источник
comment
Я думал, что есть какой-то простой способ сделать это, но, видимо, его нет. Я нашел обходной путь, заставив мой скрипт просматривать определенную папку на USB-накопителе, что позволяет мне использовать os.path.getmtime().   -  person GuitarExtended    schedule 07.05.2015


Ответы (2)


вы можете использовать библиотеки hashlib и glob для циклического просмотра файлов и вычисления хэша для каждого из них и сохранения его где-нибудь в файле. затем проверьте текущий вычисленный хэш по сравнению с предыдущим, если они отличаются, выполните обновление базы данных

person Richard Albright    schedule 06.05.2015
comment
Спасибо, но, если я не ошибаюсь, это не улавливает такие изменения, как добавление или удаление файлов на диске. - person GuitarExtended; 07.05.2015

Вместо поиска последнего измененного файла просто найдите последнее «событие» в файле, используя max(os.lstat(file)[-3:]) :

import datetime
import os

volume = 'F:/'

#simply yelds all files in all subdirs of the volume
def all_files(volume):
    for root, dirnames, filenames in os.walk(volume):
        for filename in filenames:
            yield os.path.join(root, filename)

print datetime.datetime.fromtimestamp(max((max(os.lstat(file)[-3:]) for file in all_files(volume))))

работает в моей системе (WinXP), я пытался изменить создание или копирование / вставку файлов в томе.

Не работает с удалением файлов.

person Hrabal    schedule 06.05.2015
comment
Спасибо, но мне нужно что-то, что учитывает любые изменения, включая удаление файлов. - person GuitarExtended; 07.05.2015
comment
... так что я думаю, вы можете хранить все имена файлов + даты событий только в файле (или БД) и проверять наличие различий между последними сохраненными данными и текущими. - person Hrabal; 07.05.2015
comment
Я отредактировал свой вопрос, чтобы предоставить больше информации о контексте. - person GuitarExtended; 07.05.2015