Объединение нескольких файлов CSV в один с использованием наименьшего объема памяти в Python - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь объединить более 100 CSV-файлов с миллионами записей. Каждый CSV имеет несколько общих столбцов (но регистр имен столбцов отличается в некоторых примерах csvs, column1 или Column1), но некоторые из них совершенно разные. Как я могу объединить эти файлы со всеми общими столбцами, объединенными в один столбец, в то время как другие объединены в разные столбцы. Я пробовал другие решения, доступные для стекового потока, но загрузка данных, которую я хочу уменьшить, занимает около 1 часа. Я должен использовать наименьшее количество памяти.

import csv
csv_files = os.listdir('path')
directory = 'path'
print(csv_files)
print(len(csv_files))
print(directory)

import csv
fieldNames = []
for filename in csv_files:
    filename = directory+filename
    print(filename)
    with open(filename, "r", newline="") as input_file:
        reader = csv.DictReader(input_file)
        headers = reader.fieldnames
        for h in headers:
            if h not in fieldNames:
                fieldNames.append(h)

print(fieldNames)

with open(directory+"merged_csv.csv","w", newline="") as output_file:
    writer = csv.DictWriter(output_file, fieldnames=fieldNames, extrasaction='ignore', delimiter=';')
    for fileName in csv_files:
        fileName = directory+fileName
        with open(fileName,"r", newline="") as input_file:
            row_count = sum(1 for row in input_file)
            reader = csv.DictReader(input_file)
            for line in reader:
                writer.writerow(line)
...