Я хочу скопировать данные 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 '"';
Но я с нетерпением жду, чтобы проверить каждую строку отдельно, а затем сохранить ее в таблице.
Спасибо.
Поскольку вы хотите читать и хранить его по одной строке за раз, модуль 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
Вы также можете просто сделать, чтобы таблица ввода имела четвертый столбец с нулевым значением, а затем после того, как импорт выведет дополнительный столбец.
Используйте текстовую утилиту, чтобы отрубить четвертый столбец. Таким образом, все ваши входные файлы будут иметь три столбца. Некоторая комбинация awk
, cut
и sed
должна позаботиться об этом для вас, но это зависит от того, как выглядят ваши столбцы.