Чтение и хранение данных CSV построчно в postgres

1

Я хочу скопировать данные csv из разных файлов, а затем сохранить в таблице. Но проблема в том, что количество столбцов отличается в каждом файле csv. Поэтому в каком-то файле csv есть 3 столбца, а у некоторых - 4. Поэтому, если в файле есть 4 столбца, я хочу просто проигнорировать четвертый столбец и сохранить только первые три,

Используя следующий код, я могу скопировать данные в таблицу, если есть только 3 столбца,

CREATE TABLE ImportCSVTable (
          name varchar(100),
                  address varchar(100),
                  phone varchar(100));




COPY ImportCSVTable (name , address , phone)
         FROM 'path'
        WITH DELIMITER ';' CSV QUOTE '"';

Но я с нетерпением жду, чтобы проверить каждую строку отдельно, а затем сохранить ее в таблице.

Спасибо.

Теги:

3 ответа

2
Лучший ответ

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

Вы можете создать оператор INSERT и выполнить его с помощью вашего предпочтительного модуля Python-PostGreSQL. Я использовал pyPgSQL в прошлом; не знаю, что сейчас.

#!/usr/bin/env python
import csv
filesource = 'PeopleAndResources.csv'
with open(filesource, 'rb') as f:
    reader = csv.reader(f, delimiter=';', quotechar='"')
    for row in reader:
        statement = "INSERT INTO ImportCSVTable " + \
        "(name, address, phone) " + \
        "VALUES ('%s', '%s', '%s')" % (tuple(row[0:3]))
        #execute statement
0

Вы также можете просто сделать, чтобы таблица ввода имела четвертый столбец с нулевым значением, а затем после того, как импорт выведет дополнительный столбец.

0

Используйте текстовую утилиту, чтобы отрубить четвертый столбец. Таким образом, все ваши входные файлы будут иметь три столбца. Некоторая комбинация awk, cut и sed должна позаботиться об этом для вас, но это зависит от того, как выглядят ваши столбцы.

  • 0
    Спасибо, но я хочу прочитать файл построчно, и я обнаружил, что для этой цели я должен использовать STDIN.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню