Как на Python написать скрипт для мониторинга появления новых файлов в папке temp_files (библиотека watchdog)?
Библиотека watchdog позволяет отслеживать изменения файловой системы в реальном времени. Для мониторинга появления новых файлов в папке temp_files нужно выполнить несколько шагов.
**1. Установка библиотеки**
Установите watchdog через pip:
pip install watchdog
**2. Написание скрипта**
Создайте файл monitor.py со следующим содержимым:
python
import time
import logging
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format=’%(asctime)s — %(message)s’,
datefmt=’%Y-%m-%d %H:%M:%S’
)
class NewFileHandler(FileSystemEventHandler):
«»»Обработчик событий файловой системы.»»»
def on_created(self, event):
«»»Срабатывает при создании нового файла или папки.»»»
if not event.is_directory:
logging.info(f’Новый файл обнаружен: {event.src_path}’)
def start_monitoring(path=’./temp_files’):
«»»Запускает наблюдение за указанной папкой.»»»
event_handler = NewFileHandler()
observer = Observer()
observer.schedule(event_handler, path=path, recursive=False)
observer.start()
logging.info(f’Мониторинг запущен для папки: {path}’)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
logging.info(‘Мониторинг остановлен.’)
observer.join()
if __name__ == ‘__main__’:
start_monitoring(‘./temp_files’)
**3. Ключевые компоненты**
— **FileSystemEventHandler** — базовый класс для обработки событий. Метод `on_created` вызывается при создании нового объекта.
— **Observer** — поток, который следит за файловой системой и передаёт события обработчику.
— **recursive=False** — мониторинг только верхнего уровня папки. Установите `True`, чтобы отслеживать вложенные папки.
— Проверка `event.is_directory` исключает реакцию на создание подпапок — только файлы.
**4. Запуск скрипта**
Убедитесь, что папка `temp_files` существует, затем запустите:
python monitor.py
Скрипт будет работать до нажатия Ctrl+C.
**5. Расширение функциональности**
Вы можете дополнительно фильтровать файлы по расширению:
python
def on_created(self, event):
if not event.is_directory and event.src_path.endswith(‘.csv’):
logging.info(f’Новый CSV-файл: {event.src_path}’)
Также можно добавить запись событий в лог-файл или отправку уведомлений при обнаружении нового файла.
