poisons
@poisons

Как парсить и загрузить данные в базу данных?

Дано:
1. csv файл, но относительно кривой. Данные там присуствуют в формате
field1, field2, field3, field4
data1, data2, data3, data4
field1, field2, field3, field4, field5
data1, data2, data3, data4, data5
some_line_with_random_data!^*@$!(
Т.е. в файле описываются данные нескольких таблиц сразу, по дороге есть вкрапления просто текстовых строк типа subtotal.
2. Необходимо спарсить данные и соскладировать в БД.

Т.к. в погромирование и конкретно в пайтон я умею уже 2 часа с помощью онлайн курсов, то смог родить примерно следущее.
1. Набросал функцию, которая пробегает по всему файлу и выцепляет нужные мне строки, возвращает list формата
['data1,data2,data3\n', 'data4,data5,data6\n', ]
Вот так выглядит функция
spoiler
def parsecsv_equities(filename):
    f = open(filename, "r")

    trade_data_list = []


    for line in f:
        if 'Trades,Data,Order,Equity' in line:
            trade_data_list.append(line)



    f.close()

    return trade_data_list


def parsecsv_futures(filename):
    f = open(filename, "r")

    trade_data_list = []


    for line in f:
        if 'Trades,Data,Order,Futures' in line:
            trade_data_list.append(line)



    f.close()

    return trade_data_list

2. Написал скелет функции, которая подключается к бд и вполне себе успешно дергает запросы. Пока не морочился с проблемами sql иньекций, мне это вторично.
spoiler
import pyodbc


def dbconnect(str):
    conn = pyodbc.connect('Driver={SQL Server};'
                          'Server=1.1.1.1;'
                          'Database=Reports;'
                          'Trusted_Connection=yes;')

    cursor = conn.cursor()
    cursor.execute(str)

    for row in cursor:
        print(row)


И вот тут я чето встал. Я просто не представляю каким образом из листа извлечь нужные мне данные и подпихнуть в запрос. Особенность данных в том что строки могут быть разной длинны, т.к. последнее поле является опциональным.
Ткните носом нуба как это делается, онлайн курсы мне уже начинают рассказывать про ООП, которое для моей задачи лютый оверкил, а вот как работать со строками толком не объяснили...(ну или я тупой)
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
Может лучше сразу посмотреть в сторону Data Transformation Service (типа составная часть MS SQL)?
Ответ написан
А вы посмотрите PIVOT

Либо на официальной документации Микрософт

И вообще, я бы получил нормальную ТАБЛИЦУ, и ее уже разбивал на нужные части и переносил в новую БД.

А получил бы транспонацией, как в указанных функциях выше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы