Используйте LOAD DATA INFILE, чтобы загрузить два CSV-файла в одинаковые строки

0

У меня есть два CSV файла, каждый из которых содержит разные столбцы, которые я хочу объединить в одну базу данных. Я создал базу данных со всеми столбцами из обоих файлов, но когда я использую load data infile для импорта обоих файлов вместо слияния (файл данных IE 1 заполняет столбцы 1-6, файл данных 2 заполняет 7-10), я получаю базу данных с вдвое большим количеством строк (одна строка для каждой записи в каждом CSV) и NULLS, заполняющая данные, не представленные в исходном CSV.

Я знаю, что могу исправить это, объединив CSV каким-то образом, импортировав с включенной перезаписью или объединив данные в базе данных - что наиболее эффективным способом для меня это сделать?

Теги:
csv
load-data-infile

3 ответа

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

Лучший способ сделать это - с помощью script. Сценарии импорта CSV обычно записываются на языке сценариев, таком как python, ruby ​​или php.

Вам просто нужен импортер для второго CSV для выполнения обновлений записей, созданных в первом CSV, поэтому script будет действительно только 5-10 строк. Если вы предоставите образец записи из каждого CSV, я был бы рад написать для вас.

Изменить: Здесь python script, чтобы объединить файлы, добавив точку с запятой между строками из файла1 и строками из файла2. В основном это делает команда Linux paste.

lines1 = open('file1.txt').readlines()
lines2 = open('file2.txt').readlines()
outfile = open('outfile.txt', 'w')

if len(lines1) != len(lines2):
    raise Exception("Files need to be the same length, but file1 is %s lines long and file2 is %s lines long" % (len(lines1), len(lines2)));

for i in range(len(lines1)):
    combined = lines1[i].strip() + ";" + lines2[i].strip() + "\n"
    outfile.write(combined)

Вы можете запустить его, сохранив его как combine.py и набрав python combine.py. Папка, в которую вы помещаете ее, должна содержать file1.txt, file2.txt и outfile.txt.

  • 0
    Вот набор данных для каждого CSV: # 1 - "Адрес"; "Штат"; "Почтовый индекс", # 2 - "Офис"; "Контакт"; "ContactTitle"; "Телефон"
  • 0
    на каком поле они должны быть объединены? или каждый из них содержит поле идентификатора?
Показать ещё 6 комментариев
1

Объедините два CSV в один.

Если вы используете платформу linux, используйте команду paste для объединения двух или более файлов.

PASTE(1)

NAME
       paste - merge lines of files

SYNOPSIS
       paste [OPTION]... [FILE]...

DESCRIPTION
       Write lines consisting of the sequentially corresponding lines from 
       each FILE, separated by TABs, to standard output.  
       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.

       -d, --delimiters=LIST
              reuse characters from LIST instead of TABs

       -s, --serial
              paste one file at a time instead of in parallel

       --help display this help and exit

       --version
              output version information and exit

таких как

paste file1.csv file2.csv > file3.csv
  • 1
    Я на окнах, поэтому я не могу использовать это. Есть ли сопоставимая функция / утилита для Windows?
  • 0
    Проблема в том, что ему не нужно, чтобы они складывались вертикально, а соединялись горизонтально на основе идентификатора.
Показать ещё 3 комментария
0

Я бы посмотрел на Perl и Text:: CSV. Одна из проблем, о которых вам нужно подумать, заключается в том, находятся ли данные в одном порядке в двух файлах.

Ещё вопросы

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