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

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

  • Объединение двух таблиц с миллионами строк в Python
  • Pandas Merge по имени и ближе к дате
  • Объединение 2 наборов данных csv с Python общим столбцом идентификатора - один csv имеет несколько записей для уникального идентификатора
  • Python Pandas объединяет только определенные столбцы
  • Объединение нескольких фреймов данных с уникальными индексами
  • слияние словарей в недоступных
  • Внедрение системы несвязанных наборов в Python
  • Как объединить два файла CSV на основе поля и сохранить одинаковое количество атрибутов для каждой записи?
  • 11 Solutions collect form web for “как объединить 200 файлов csv в Python”

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

    fout=open("out.csv","a") # first file: for line in open("sh1.csv"): fout.write(line) # now the rest: for num in range(2,201): f = open("sh"+str(num)+".csv") f.next() # skip the header for line in f: fout.write(line) f.close() # not really needed fout.close() 

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

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

     fout=open("out.csv","a") for num in range(1,201): for line in open("sh"+str(num)+".csv"): fout.write(line) fout.close() 

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

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

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

     from glob import glob with open('singleDataFile.csv', 'a') as singleFile: for csvFile in glob('*.csv'): for line in open(csvFile, 'r'): singleFile.write(line) 

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

     import pandas as pd combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] ) 

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

     combined_csv.to_csv( index=False ) 

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

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

    Это должно быть следующим …

     from glob import glob with open('main.csv', 'a') as singleFile: for csv in glob('*.csv'): if csv == 'main.csv': pass else: for line in open(csv, 'r'): singleFile.write(line) 

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

     import csv rows = [] for f in (file1, file2, ...): reader = csv.reader(open("f", "rb")) for row in reader: rows.append(row) writer = csv.writer(open("some.csv", "wb")) writer.writerows("\n".join(rows)) 

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

    Достаточно просто объединить все файлы в каталог и объединить их

     import glob import csv # Open result file with open('output.txt','wb') as fout: wout = csv.writer(fout,delimiter=',') interesting_files = glob.glob("*.csv") for filename in interesting_files: print 'Processing',filename # Open and process file h = True with open(filename,'rb') as fin: if h: h = False else: fin.next()#skip header for line in csv.reader(fin,delimiter=','): wout.writerow(line) 

    Я изменил то, что @wisty сказал, что он работает с python 3.x, для тех из вас, у кого есть проблема с кодировкой, также я использую модуль os, чтобы избежать жесткого кодирования

     import os def merge_all(): dir = os.chdir('C:\python\data\\') fout = open("merged_files.csv", "ab") # first file: for line in open("file_1.csv",'rb'): fout.write(line) # now the rest: list = os.listdir(dir) number_files = len(list) for num in range(2, number_files): f = open("file_" + str(num) + ".csv", 'rb') f.__next__() # skip the header for line in f: fout.write(line) f.close() # not really needed fout.close() 
    Python - лучший язык программирования в мире.