Я хочу посмотреть два разных каталога для модификации файла excel (отметка времени), и после модификации я хочу вызвать один HTTP-запрос API к одной конечной точке, я уже написал код ниже, используя Python Watchdog и библиотеку запросов, но столкнулся с двумя ошибками в одном и том же .
Проблема 1: - событие (event.event_type == 'modified') срабатывает два раза при модификации одного файла, что приводит к отправке двух запросов данных. Итак, каков правильный тип события для наблюдения за изменением файла в сторожевой библиотеке, что сделает этот условный код истинным только один раз.
Проблема 2: - В классе «Наблюдатель» в функции «Пуск» я не могу присвоить значение Handler() переменной event_handler. какую ошибку я здесь делаю?
пожалуйста, помогите мне исправить этот или любой другой лучший подход. заранее спасибо
import time
from time import sleep
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import json
import requests
import pandas as pd
import os
from collections import defaultdict
class Handler(FileSystemEventHandler):
def __init__(self, path):
super().__init__()
self.path = path
self.files = defaultdict(lambda:0)
def on_modified(self, event):
if event.is_directory:
return None
elif (event.event_type == 'modified' and event.src_path.endswith('.csv')):
# api_url = 'http://10.166.72.3:8080/promo/summary?userId=abc'
stats = os.stat(event.src_path).st_ctime
sleep(5)
if stats - self.files[event.src_path] > 1:
df = pd.read_csv(self.path)
df1 = df.to_json(orient='records')
df1.replace("\\","")
print(df1)
self.files[event.src_path] = stats
#r = requests.post(url=api_url, json=df1)
#print(r.status_code, r.reason, r.text)
class Watcher:
def __init__(self, directory, handler):
self.directory = directory
self.handler = handler
self.observer = Observer()
def start(self):
#event_handler = Handler()
self.observer.schedule( self.handler, self.directory, recursive=True)
self.observer.start()
def stop(self):
self.observer.stop()
def join(self):
self.observer.join()
if __name__ == '__main__':
handler1 = Handler('C:\\Users\\BPM_admin\\Desktop\\OCR_RPA\\FirstOCR\\Diageo\\Output\\InvoiceMasterData.csv')
handler2 = Handler('C:\\Users\\BPM_admin\\Desktop\\OCR_RPA\\SecondOCR\\Diageo\\Output\\AgreementMasterData.csv')
w1 = Watcher("C:\\Users\\BPM_admin\\Desktop\\OCR_RPA\\FirstOCR\\Diageo\\Output", handler1)
w2 = Watcher("C:\\Users\\BPM_admin\\Desktop\\OCR_RPA\\SecondOCR\\Diageo\\Output", handler2)
w1.start()
w2.start()
try:
while True:
time.sleep(5)
except:
w1.stop()
w2.stop()
print("Error")
w1.join()
w2.join()