首页 > 解决方案 > 看门狗观察者不处理所有文件

问题描述

我有一段代码使用看门狗观察器调用大量函数来检测变化。问题是,只有 Sales.tsv 文件下面的代码片段会触发该过程,如果我运行 Service.tsv 文件,它只会锁定,然后它甚至不会处理 Sales.tsv 之后它也不返回“出现问题”消息。Sales.tsv 文件也会触发 print('Document Found, processing...'),而 Service.tsv 则不会。

我还尝试在 if、elif 和 else 之间进行更改,它们都不起作用。还尝试改变定位并将销售置于 service.tsv 段之上,但没有成功。

这两个文件都有正确的文件扩展名和正确的名称,唯一的区别是每个文件中包含的内容和文件的大小。销售文件只有8kb,服务1 是23kb。

folder_to_track = '/Users/myname/Desktop/New Reports'
folder_destination = '/Users/myname/Desktop/Old Reports'


class ChangeHandler(FileSystemEventHandler):
    def on_modified(self, event):
            for filename in os.listdir(folder_to_track):
                file_exists = os.path.isfile(folder_destination + '/' + filename)
                while file_exists:
                    file_exists = os.path.isfile(folder_destination + '/' + filename)

                if os.path.splitext(filename)[-1] == '.tsv':
                    print('Document Found, processing...')

                    if filename == 'Service.tsv':
                        src = folder_to_track + '/' + filename
                        new_destination = folder_destination + '/' + filename
                        servicedf = pd.read_csv(src, sep='\t')
                        os.rename(src, new_destination)
                        service_report(servicedf)

                    if filename == 'Sales.tsv':
                        src = folder_to_track + '/' + filename
                        new_destination = folder_destination + '/' + filename
                        salesdf = pd.read_csv(src, sep='\t')
                        os.rename(src, new_destination)
                        sales_report(salesdf)

                else:
                    print('Something Went Wrong')
                    return



def main():
    while 1:
        event_handler = ChangeHandler()
        observer = Observer()
        observer.schedule(event_handler, folder_to_track, recursive=True)
        observer.start()

        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            observer.stop()
        observer.join()

if __name__ == '__main__':
    main()

标签: pythonpandasfunctionpython-watchdog

解决方案


推荐阅读