3

2 時間ごとに更新されるファイルがあります。ファイルを自動的に検出し、抽出した情報をデータベースに挿入する必要があります。

DBMS は Postgresql、プログラミング言語は Python です。どうすればいいですか?

DAL (Database Abstraction Layer) を利用してファイルとデータベースを接続し、postgresql LISTEN/NOTIFYテクニックを使用して新しいファイルを検出したいと考えています。LISTEN私に同意する場合は、 /NOTIFY関数を使用してファイルを検出する方法を教えてください。

ありがとうございました

4

2 に答える 2

3

必要なのは、ファイル システム通知 API を使用して、ファイルが変更されたときにコールバック関数を実行する、デーモンとして実行し続けるスクリプトを作成することです。ファイルの変更がスクリプトに通知されると、スクリプトは PostgreSQL に接続して必要な作業を行い、次の変更を待機してスリープ状態に戻ります。

ディレクトリの変更を監視する真のクロスプラットフォームの唯一の方法は、遅延ループを使用してポーリングos.listdiros.stat、新しいファイルと更新された変更時刻を確認することです。これは電力とディスク I/O の無駄です。また、ファイルの大きなセットでは遅くなります。ディレクトリ内のファイルが変更されるたびにOSがディレクトリの変更時間を確実に変更する場合は、ディレクトリだけ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 に答える