Я пытаюсь настроить систему, которая при каждом создании нового файла в папке автоматически считывает содержимое и помещает его в базу данных. Эти файлы будут в основном .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.