Я пытаюсь настроить систему, которая при каждом создании нового файла в папке автоматически считывает содержимое и помещает его в базу данных. Эти файлы будут в основном .txt, но мне, возможно, придется преобразовать их в файлы .csv.
В настоящее время я использую сторожевой таймер, который прекрасно работает. Он "просматривает" определенную папку и создает событие каждый раз, когда файл (/ папка) создается, редактируется или удаляется. Мой вопрос: каков наилучший / самый эффективный способ справиться с этим событием?
Файлы будут добавляться каждый день в определенное время (каждый день в одно и то же время) и могут варьироваться от 100 до 1000 различных файлов в день. Все файлы добавляются в папку в течение нескольких минут.
Мой код, используя Psycopg:
import sys
import time
import logging
import psycopg2
import pprint
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
def main():
    conn_string = "host='localhost' dbname='dbname' user='user' password='password'"
    print "Connecting to database\n ->%s" % (conn_string)
    conn = psycopg2.connect(conn_string)
    cursor = conn.cursor()
    cursor.execute("COPY trades FROM 'filepath/test.txt' DELIMITERS ',' CSV;")
    records = cursor.fetchall()
    pprint.pprint(records)
if __name__ == "__main__":
    main()
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Как вы можете видеть прямо сейчас, скрипт подключается к базе данных и импортирует test.txt (статическое расположение), затем он также просматривает папку и печатает все, что происходит. Эти два события еще не связаны. Таким образом, мой вопрос, более конкретно, я должен вызывать main() каждый раз, когда запускается новый on_create (таким образом, новое соединение каждый раз)? Или создайте соединение с базой данных и затем просмотрите папку (таким образом, поддерживая открытое соединение повсюду), а затем cursos.execute каждый раз, когда запускается новый on_create .
Что было бы наиболее эффективным способом?
(Конечно, filepath/test.txt будет изменен на путь найденных файлов)
База данных: PostgreSQL. Python версия 2.7.
