Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 18, 2018 04:57:53

gogogogo
Зарегистрирован: 2018-04-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

Имеется один файл формате csv, в нем находиться несколько разных таблиц, необходимо импортировать эти данные в sql по разным БД. Сам процесс импортирования не является трудным, однако не могу найти решения разделения чтения данных. Решение вижу в предварительном “разделение” файла, однако может сообщество подскажет что то другое?
В одном месте подсказали использовать f.read().split(''): для разделения, однако результата этого не дало.

 Bfile = "export.csv"
with open ( Bfile, 'r' ) as fin:
    for t in fin.read ().split ( ';;;;;' ):
        dr = csv.DictReader (t, delimiter =';')
        for i in dr:
            to_db = [(i['п»ї_CATEGORY_'], i['_ID_']) for i in dr]
KeyError: ‘п»ї_CATEGORY_’, при шаговом анализе получается
проблема в то что csv.DictReader после split не воспринимает данные, или я что то делаю не так?

Отредактировано gogogogo (Апрель 18, 2018 05:00:23)

Офлайн

#2 Апрель 19, 2018 17:11:05

driveman
Зарегистрирован: 2018-02-28
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

Насчет этой строки:

     for t in fin.read ().split ( ';;;;;' ):
Символ разделителя в функции split() надо указывать один раз.
То есть, если хотелось пройтись по значениям, разделенным символом “;”, то правильно так:
 split(';')

Офлайн

#3 Апрель 19, 2018 19:25:53

gogogogo
Зарегистрирован: 2018-04-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

driveman
То есть, если хотелось пройтись по значениям, разделенным символом “;”
В моей примере используется именно split ( ‘;;;;;’ ), хотя это не так важно.

Сама концепция разделить две-три таблицы в одном csv файле…… я не пока не вижу способа разделить их. По количеству строк - пожалуйста, вытащить часть информации из таблицы через регулярку тоже реализуемо, но вот всю таблицу.. Может есть какие то альтернативные идеи? Прикладывают файл csv для примера.

Прикреплённый файлы:
attachment export.csv (578 байт)

Офлайн

#4 Апрель 19, 2018 20:06:04

driveman
Зарегистрирован: 2018-02-28
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

gogogogo
Может есть какие то альтернативные идеи?
Посмотерв export.csv понял, почему было split ( ‘;;;;;’ ). На первый взгляд, ваш код должен работать. Сейчас просто нет времени его потестировать.

Что же касается альтернативных идей - тупо с помощью readline() перебирать строки файла,
Если встретили ‘;;;;;’ в начале строки - значит надо начинать новую таблицу и следующая строка - заголовки колонок
Считали куда надо эти заголовки колонок
Следующие строки - со значениями ячеек, работаем с ними.

Не очень красивый способ, но вполне рабочий.

Офлайн

#5 Апрель 19, 2018 21:50:39

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Как импортировать в sql несколько разных таблиц из одного csv файла?

gogogogo
csv - компактное отображение таблицы. первая строка - заголовки столбцов, дальше - столбцы значений.
у вас в одном файле две таблицы с разной структурой, без костылей не сделаешь. делите на 2 файла лучше.
и записан с ошибкой - перед _CATEGORY_  3 нечитаемых байта

Офлайн

#6 Апрель 20, 2018 02:05:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

gogogogo
Имеется один файл формате csv, в нем находиться несколько разных таблиц
Что-то не то у тебя с исходными данными. В одном CSV-файле находится одна таблица, это формат такой. Никакие .split()'ы при работе с CSV не нужны, есть специальный модуль для этого, который всё выполняет сам.



Офлайн

#7 Апрель 20, 2018 05:01:25

gogogogo
Зарегистрирован: 2018-04-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

py.user.next
есть специальный модуль для этого, который всё выполняет сам.
Да, с одной таблицей он справляется отлично, но у меня две таблицы… и я не знаю как их разделить..

vic57
без костылей не сделаешь. делите на 2 файла лучше
я не совсем хорошо знаю pyton чтобы самому продумать работающий алгоритм разделения файла, а найти какой либо пример, или хотя бы описание способа как это можно сделать мне не удалось.

Офлайн

#8 Апрель 20, 2018 06:27:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Как импортировать в sql несколько разных таблиц из одного csv файла?

gogogogo
но у меня две таблицы… и я не знаю как их разделить..
А как ты их получил в одном файле? Код напиши для одного файла, потом просто раздели файл на два правильных файла и по отдельности запускай код для них.



Офлайн

#9 Апрель 20, 2018 11:31:08

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Как импортировать в sql несколько разных таблиц из одного csv файла?

gogogogo
но у меня две таблицы… и я не знаю как их разделить..
для твоего файла так
 with open('export.csv') as f:
    data = f.read().split(';;;;;\n')
with open('1.csv','w') as f1,open('2.csv','w') as f2:
    f1.write(data[0][1:])
    f2.write(data[1])

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version