我有每2小时更新一次的文件。我必须自动检测文件,并将从中提取的信息插入到数据库中。
我们的数据库管理系统是Postgresql,编程语言是Python。你觉得我该怎么做呢?
我想利用DAL (数据库抽象层)在文件和数据库之间建立连接,并使用postgresql LISTEN/NOTIFY技术来检测新文件。如果您同意我的观点,请告诉我如何使用LISTEN/NOTIFY函数来检测文件。
谢谢
发布于 2012-08-20 09:46:08
您需要的是编写一个脚本,在文件发生更改时使用文件系统通知API来运行回调函数,从而保持作为dómon运行。当脚本收到文件更改的通知时,它应该连接到PostgreSQL并执行所需的工作,然后继续睡眠,等待下一次更改。
监视目录更改的唯一真正的跨平台方法是使用延迟循环来轮询os.listdir和os.stat,以检查新文件和更新的修改时间。这是对电源和磁盘I/O的浪费;对于大型文件集,它也会变得很慢。如果您的操作系统在目录中的文件发生更改时可靠地更改了目录修改时间,那么您可以在延迟循环中对目录执行os.stat操作,这很有帮助。
最好使用特定于操作系统的通知API。如果您使用的是Java,我会告诉您使用NIO2 watch service,它为您处理所有的平台细节。看起来Watchdog可能为Python提供了类似的东西,但我在Python代码中不需要做目录更改通知,所以我没有对它进行测试。如果它不起作用,您可以使用特定于平台的技术,如Linux的inotify/dnotify和Windows的各种监视器API。
另请参阅:
发布于 2012-08-19 20:59:40
您不能使用LISTEN/NOTIFY,因为它只能从数据库内部发送消息,而您的文件显然不在其中。
您需要让python脚本扫描文件所在的目录,并检查它们的修改时间(mtime)。如果它们被更新,您将需要读取文件,解析数据并将其插入到数据库中。如果不知道文件的格式,就没有办法更具体。
https://stackoverflow.com/questions/12026090
复制相似问题