Необходимо сохранить статистику из 'test.log' в Postgres

День вечер! Если коротко о тз то необходимо :

  1. распаковать(запомнить имя архива), 2. парсить(получить строки). 3 создать таблицу в POSTRGESQL, где: 1) - колонка testid - имя архива (без tar.gz) 2) - далее названия колонок в файле 'columns.csv' (121 имя ) 4. Записать распарсенные данные в таблицу.

Ссылка на архив и таблицу https://drive.google.com/drive/folders/1t0tIVOMI36i6kl0ByPr4gxddUEC0h9lQ

/Пример строки/ -

3;fio-3.27-12-gd7a2;oltp_read_uniform;0;0;66362840;553019;69127;120001;3;662;7.105567;0.883065;17;23249;107.165068;60.988828;1.000000%=62;5.000000%=86;10.000000%=89;20.000000%=92;30.000000%=95;40.000000%=97;50.000000%=99;60.000000%=101;70.000000%=104;80.000000%=109;90.000000%=119;95.000000%=164;99.000000%=197;99.500000%=242;99.900000%=954;99.950000%=970;99.990000%=1613;0%=0;0%=0;0%=0;50;23256;114.506388;60.999852;489672;621288;100.000000%;553040.327731;1646.634228;0;0;0;0;0;0;0.000000;0.000000;0;0;0.000000;0.000000;1.000000%=0;5.000000%=0;10.000000%=0;20.000000%=0;30.000000%=0;40.000000%=0;50.000000%=0;60.000000%=0;70.000000%=0;80.000000%=0;90.000000%=0;95.000000%=0;99.000000%=0;99.500000%=0;99.900000%=0;99.950000%=0;99.990000%=0;0%=0;0%=0;0%=0;0;0;0.000000;0.000000;0;0;0.000000%;0.000000;0.000000;2.976875%;9.288333%;8295390;0;381;100.0%;0.0%;0.0%;0.0%;0.0%;0.0%;0.0%;0.00%;0.00%;0.00%;0.01%;0.01%;50.52%;49.00%;0.24%;0.01%;0.19%;0.03%;0.01%;0.01%;0.01%;0.01%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%

Ответы (2 шт):

Автор решения: strawdog

Принципиально сделать можно таким образом:

lst=[]
with open('test.log', 'r') as f:
    while "Starting" not in f.readline():
        pass
    while True :
        s = f.readline()
        print(s)
        if "{" in s:
            break
        else:
            lst.append(s.strip())
        
res = [x.split(';') for x in lst]

теперь в resу вас список списков с нужными строками, разбитыми по ';'.

→ Ссылка
Автор решения: A_Vaclav

пока два шага

#######################
#     STEP 1
#######################
import tarfile

name_tar = "fio-example (3).tar.gz"
tar = tarfile.open(name_tar)
tar.extractall()
tar.close()
#распакует весь архив, то есть путь будет ..\fio-example\test.log
##############################
#      STEP 2
##############################
import re
import json
import os

dir_t = os.path.dirname(__file__)
filename = os.path.join(dir_t, 'fio-example', 'test.log')

def reader(filename):

    regexp = r'{(?s:.*)}'

    with open(filename) as f:
        log = f.read()

       json_value = re.findall(regexp, log)

       log_dict = json.loads(json_value[0])

       print(log_dict["fio version"])#проверочный

if __name__ == '__main__':
    reader(filename)
→ Ссылка