Python 看门狗观察员不处理所有文件

Python 看门狗观察员不处理所有文件,python,pandas,function,python-watchdog,Python,Pandas,Function,Python Watchdog,我有一段代码,它使用看门狗观察员来检测变化,从而调用大量函数。问题是,对于下面的代码片段,只有Sales.tsv文件会触发该过程,如果我运行Service.tsv文件,它会锁定,然后它甚至不会处理Sales.tsv,之后它也不会返回“出错”消息。Sales.tsv文件还将触发打印('找到文档,正在处理…'),Service.tsv文件不会触发打印 我也尝试过在if、elif和else之间切换,它们都不起作用。我们也尝试过改变定位,将销售置于service.tsv细分市场之上,但运气不佳 两个文件

我有一段代码,它使用看门狗观察员来检测变化,从而调用大量函数。问题是,对于下面的代码片段,只有Sales.tsv文件会触发该过程,如果我运行Service.tsv文件,它会锁定,然后它甚至不会处理Sales.tsv,之后它也不会返回“出错”消息。Sales.tsv文件还将触发打印('找到文档,正在处理…'),Service.tsv文件不会触发打印

我也尝试过在if、elif和else之间切换,它们都不起作用。我们也尝试过改变定位,将销售置于service.tsv细分市场之上,但运气不佳

两个文件都有正确的文件扩展名和名称,唯一的区别是每个文件中包含的内容和文件的大小。销售文件只有8kb,服务文件只有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()

如果我的阅读正确,则如果目标文件夹中已存在任何一个文件且未被删除,则会有一个无限循环(
,而文件\u存在:
)。另外,这本身不是一个bug,但您可以使用它来构建路径字符串。@PhilBrubaker我正在添加一个计数器,但在文件存在时忘了删除
谢谢您指出这一点。通过移除它,我可以让它正常运行并妥善处理一切,但现在我遇到了一个更复杂的路障。我想让子进程在同一时间独立运行,由一个函数触发,一旦发现并清理数据,实际使用的数据是什么。我正在考虑打开一个新的终端窗口,运行脚本以使用清理后的数据,然后关闭。Mac似乎没有这个选项。如果我读得正确,如果目标文件夹中已经存在任何一个文件并且没有被删除,则会有一个无限循环(
,而文件\u存在:
)。另外,这本身不是一个bug,但您可以使用它来构建路径字符串。@PhilBrubaker我正在添加一个计数器,但在文件存在时忘了删除
谢谢您指出这一点。通过移除它,我可以让它正常运行并妥善处理一切,但现在我遇到了一个更复杂的路障。我想让子进程在同一时间独立运行,由一个函数触发,一旦发现并清理数据,实际使用的数据是什么。我正在考虑打开一个新的终端窗口,运行脚本以使用清理后的数据,然后关闭。Mac似乎没有这个选择。