2015-05-06 3 views
2

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

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

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

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

Заранее за вашу помощь.

+0

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

ответ

0

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

+0

Спасибо, но если я не ошибаюсь, это не приведет к изменениям, например, добавлению или удалению файлов на диске. – GuitarExtended

0

Вместо того, чтобы найти последнее изменение файла, просто найти последнее «событие» на файл с помощью 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), я попытался изменить создание o копировать/вставлять файлы в том.

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

+0

Спасибо, но мне нужно что-то, что учитывает любые изменения, включая удаление файлов. – GuitarExtended

+0

..так, я думаю, вы можете хранить только все имена файлов + даты событий в файле (или db) и проверять разницу между последними сохраненными данными и текущим. – Hrabal

+0

Я отредактировал мой вопрос, чтобы предоставить дополнительную информацию о контекст. – GuitarExtended

Смежные вопросы