Как объединить два csv файла в один python

Обновлено: 28.06.2024

Ребята, у меня есть 200 отдельных файлов csv, названных из SH (1), на SH (200). Я хочу объединить их в один файл csv. Как я могу это сделать?

Как вы хотите, чтобы они слились? Каждая строка в файле CSV является строкой. Итак, один простой вариант - объединить все файлы вместе. Каждый файл имеет два столбца. Я хочу объединить их в один файл с двумя столбцами последовательно. @Chuck: Чак: Как насчет того, чтобы взять все ответы в ваших комментариях (на вопрос и на ответы) и обновить ваш вопрос? Этот вопрос должен быть назван «Как объединить . » вместо «Как объединить . »

Как сказал ghostdog74, но на этот раз с заголовками:

вместо этого вы можете использовать f.__next__() если f.next() в python3.x. Просто примечание: можно использовать синтаксис with open и избегать ручного .close() файлов.

Почему вы не можете просто sed 1d sh*.csv > merged.csv ?

Иногда вам даже не нужно использовать python!

Скопируйте информацию заголовка из одного файла: sed -n 1p some_file.csv> merged_file.csv Скопируйте все, кроме последней строки, из всех других файлов: sed 1d * .csv >> merged_file.csv @blinsay Добавляет заголовок в каждом CSV-файле к объединенному файлу. Как вы используете эту команду, не копируя информацию заголовка для каждого последующего файла после первого? Я, кажется, получаю информацию заголовка, появляющуюся неоднократно.

И если вы хотите экспортировать его в один файл csv, используйте это:

@wisty wisty, @wisty Энди, предположим, что все файлы имеют заголовки для каждой строки - некоторые строки с разными заголовками. Нет заголовков для 2 столбцов в каждом файле. Как можно объединить, чтобы к каждому файлу добавлялся только столбец. @dirtysocks45 dirtysocks45, я изменил ответ, чтобы сделать это более явным.

Я просто проведу другой пример кода в корзине

@Andy И я не вижу разницы между stackoverflow, напоминающим мне о необходимости проголосовать за ответ, и тем, что я напоминаю людям поделиться своей признательностью (путем голосования), если они находят мой ответ полезным. Я знаю, что это не Facebook, и я не похож на охотника ..

Это зависит от того, что вы подразумеваете под "слиянием" - есть ли у них одинаковые столбцы? У них есть заголовки? Например, если все они имеют одинаковые столбцы и нет заголовков, достаточно простой конкатенации (откройте файл назначения для записи, зациклитесь на источниках, открывающих каждый для чтения, используйте shutil.copyfileobj из открытого источника для чтения в открытое для записи место, закройте источник, продолжайте цикл - используйте оператор with , чтобы сделать закрытие от вашего имени). Если они имеют одинаковые столбцы, но также и заголовки, вам понадобится readline для каждого исходного файла, кроме первого, после того, как вы откроете его для чтения, прежде чем копировать его в место назначения, чтобы пропустить строку заголовков.

Если файлы CSV не все имеют одинаковые столбцы, вам нужно определить, в каком смысле вы их "слияете" (например, SQL JOIN? или "по горизонтали", если все они имеют одинаковое количество строк? и т.д.) - нам трудно угадать, что вы имеете в виду в этом случае.

Каждый файл имеет два столбца с заголовками. Я хочу объединить их в один файл с двумя столбцами последовательно.

Небольшое изменение в коде выше, так как оно действительно не работает правильно.

ребята, у меня здесь есть 200 отдельных csv-файлов с именем от SH (1) до SH (200). Я хочу объединить их в один файл CSV. Как я могу это сделать?

Как сказал ghostdog74, но на этот раз с заголовками:

почему вы не можете просто sed 1d sh*.csv > merged.csv ?

иногда вам даже не нужно использовать python!

использовать принято StackOverflow ответ создать список из CSV-файлов, которые вы хотите добавить, а затем запустить этот код:

и если вы хотите экспортировать его в CSV-файл, используйте этот:

это зависит от того, что вы подразумеваете под "слиянием" - имеют ли они одинаковые столбцы? У них есть заголовки? Например, если все они имеют одинаковые столбцы и нет заголовков, достаточно простой конкатенации (откройте файл назначения для записи, выполните цикл над источниками, открывая каждый для чтения, используйте shutil.copyfileobj из источника open-for-reading в пункт назначения open-for-writing закройте источник, продолжайте цикл-используйте with заявление, чтобы сделать заключение о вашем имя.) Если у них одинаковые столбцы, но и заголовки, вам понадобится readline в каждом исходном файле, кроме первого, после его открытия для чтения перед копированием в пункт назначения, пропустить строку заголовков.

Если CSV-файлы не имеют одинаковых столбцов, вам нужно определить, в каком смысле вы их "объединяете" (например, SQL-соединение? или "горизонтально", если все они имеют одинаковое количество строк? и т. д.) - Нам трудно догадаться, что вы имеете в виду в этом случае.

Я просто собираюсь через другой пример кода в корзине

если объединенный CSV будет использоваться в Python, просто используйте glob чтобы получить список файлов для передачи в fileinput.input() через files аргумент, затем используйте csv модуль, чтобы прочитать все это на одном дыхании.

небольшое изменение кода выше, поскольку он на самом деле работает неправильно.

это должно быть следующим образом.

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

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

Читайте также: