Найти - Пользователи
Полная версия: Как импортировать в sql несколько разных таблиц из одного csv файла?
Начало » Python для новичков » Как импортировать в sql несколько разных таблиц из одного csv файла?
1
gogogogo
Имеется один файл формате 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 не воспринимает данные, или я что то делаю не так?

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

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

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

Не очень красивый способ, но вполне рабочий.
vic57
gogogogo
csv - компактное отображение таблицы. первая строка - заголовки столбцов, дальше - столбцы значений.
у вас в одном файле две таблицы с разной структурой, без костылей не сделаешь. делите на 2 файла лучше.
и записан с ошибкой - перед _CATEGORY_  3 нечитаемых байта
py.user.next
gogogogo
Имеется один файл формате csv, в нем находиться несколько разных таблиц
Что-то не то у тебя с исходными данными. В одном CSV-файле находится одна таблица, это формат такой. Никакие .split()'ы при работе с CSV не нужны, есть специальный модуль для этого, который всё выполняет сам.
gogogogo
py.user.next
есть специальный модуль для этого, который всё выполняет сам.
Да, с одной таблицей он справляется отлично, но у меня две таблицы… и я не знаю как их разделить..

vic57
без костылей не сделаешь. делите на 2 файла лучше
я не совсем хорошо знаю pyton чтобы самому продумать работающий алгоритм разделения файла, а найти какой либо пример, или хотя бы описание способа как это можно сделать мне не удалось.
py.user.next
gogogogo
но у меня две таблицы… и я не знаю как их разделить..
А как ты их получил в одном файле? Код напиши для одного файла, потом просто раздели файл на два правильных файла и по отдельности запускай код для них.
vic57
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])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB