3

我有每 2 小时更新一次的文件。我必须自动检测文件并将从中提取的信息插入数据库。

我们的 DBMS 是 Postgresql,编程语言是 Python。你会建议我怎么做?

我想利用 DAL(数据库抽象层)在文件和数据库之间建立连接,并使用 postgresql LISTEN/NOTIFY技术来检测新文件。如果您同意我的观点,请告诉我如何使用LISTEN/NOTIFY函数来检测文件。

谢谢

4

2 回答 2

3

您需要编写一个作为守护程序保持运行的脚本,使用文件系统通知 API 在文件更改时运行回调函数。当通知脚本文件更改时,它应该连接到 PostgreSQL 并执行所需的工作,然后返回睡眠状态等待下一次更改。

监视目录更改的唯一真正跨平台的方法是使用延迟循环来轮询os.listdiros.stat检查新文件和更新的修改时间。这是对电源和磁盘 I/O 的浪费;对于大量文件,它也会变慢。如果您的操作系统在目录中的文件更改时可靠地更改目录修改时间,您可以只os.stat在延迟循环中使用目录,这会有所帮助。

使用操作系统特定的通知 API 要好得多。如果您使用 Java,我会告诉您使用 NIO2监视服务,它为您处理所有平台细节。看起来Watchdog可能会为 Python 提供类似的东西,但我不需要在我的 Python 编码中进行目录更改通知,所以我没有对其进行测试。如果它不起作用,您可以使用特定于平台的技术,例如 Linux 的 inotify/dnotify 和 Windows 的各种观察程序 API。

也可以看看:

于 2012-08-20T01:46:07.767 回答
1

您不能使用 LISTEN/NOTIFY,因为它只能从数据库中发送消息,而您的文件显然不在那里。

您需要让您的 python 脚本扫描文件所在的目录并检查它们的修改时间 (mtime)。如果它们被更新,您需要读入文件,解析数据并将其插入数据库。在不知道文件格式的情况下,没有办法更具体。

于 2012-08-19T12:59:39.710 回答