Получить список быстро меняющихся файлов, которые новее, чем отметка времени - PullRequest
1 голос
/ 02 мая 2020

Я хотел бы получить список быстро меняющихся файлов, которые новее, чем отметка времени.

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

В моем первом испытании я сделал проблему отделимой, т. Е. Сначала (1) перечислил файлы, а затем (2) попытался посмотреть время их изменения:

import os.path
import glob
import datetime

def get_newer_files(ref_time = '2020-05-02 16:27:00.000000'):
  path = os.path.expanduser("~") + '\\Downloads\\'

  files = [f for f in glob.glob(path + "*.*")]

  selected_files = []
  for f in files:
    dt = os.path.getmtime(f)
    dt_string = str(datetime.datetime.fromtimestamp(dt))
    if (dt_string > ref_time):
      selected_files += [f]

  return selected_files

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

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

1 Ответ

1 голос
/ 02 мая 2020

Попробуйте использовать scandir(), который возвращает итератор всех объектов в каталоге, включая информацию об атрибутах файла:

from os import scandir
from datetime import datetime

dir_entries = scandir('.')
for entry in dir_entries:
    if entry.is_file():
        file_name = entry.name
        last_modified = datetime.utcfromtimestamp(entry.stat().st_mtime)
        print(file_name, last_modified)
        # you can filter here unwanted files older than X
...