Stack Overflow на русском Asked by Crazy Theory on November 9, 2020
подскажите, пожалуйста, каким образом я мог бы отследить появляющийся файл в директории, используя операционную систему Windows?
Понятно, что нужно объявить цикл, но неясно, каким образом получить новый файл.
К примеру у меня в директории рядом с файлом .py лежит папка, в которой будут появляться новые файлы, в этой папке уже есть файл d.txt, когда я запущу питоновский скрипт я ожидаю, что в момент, когда я засуну туда еще один файл, например c.txt он его обнаружит, а там в этой зависимости я планирую произвести нужные мне операции.
Попробуйте модуль watchdog.
Пример:
import logging
import time
from pathlib import Path
# pip install watchdog
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
path = Path(__file__).resolve().parent
event_handler = LoggingEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
PS.
В примере для обработки изменений в папке использовался LoggingEventHandler
, а если вам нужен свой обработчик, то нужно его создать, наследую от FileSystemEventHandler
и переопределив методы:
def on_moved(self, event)
def on_created(self, event)
def on_deleted(self, event)
def on_modified(self, event)
Пример (немного переделанный LoggingEventHandler
):
from watchdog.events import FileSystemEventHandler
class CustomEventHandler(FileSystemEventHandler):
def on_moved(self, event):
super().on_moved(event)
what = 'directory' if event.is_directory else 'file'
print(f"Moved {what}: from {event.src_path} to {event.dest_path}")
def on_created(self, event):
super().on_created(event)
what = 'directory' if event.is_directory else 'file'
print(f"Created {what}: {event.src_path}")
def on_deleted(self, event):
super().on_deleted(event)
what = 'directory' if event.is_directory else 'file'
print(f"Deleted {what}: {event.src_path}")
def on_modified(self, event):
super().on_modified(event)
what = 'directory' if event.is_directory else 'file'
print(f"Modified {what}: {event.src_path}")
Кст, возможно будет более функционально наследоваться от RegexMatchingEventHandler
или PatternMatchingEventHandler
-- это дает возможность настройки фильтрации "из коробки".
Correct answer by gil9red on November 9, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP