объединить большие (> 100 МБ) несколько (скажем, 10) CSV-файлов, используя python - PullRequest
0 голосов
/ 20 апреля 2020

У меня 12 больших CSV-файлов с одинаковой структурой. Я хотел бы объединить все файлы CSV в один файл CSV. Не повторяйте заголовки. Теперь я использую shutil следующим образом.

import shutil
import time
csv_files = ['file1.csv', 'file2.csv', 'file3.csv', 'file4.csv', 'file5.csv', 'file6.csv']

target_file_name = 'target.csv';
start_time = time.time()
shutil.copy(csv_files[0], target_file_name)
with open(target_file_name, 'a') as out_file:
    for source_file in csv_files[1:]:
        with open(source_file, 'r') as in_file:
            in_file.readline()
            shutil.copyfileobj(in_file, out_file)
            in_file.close()
    out_file.close()
print("--- %s seconds ---" % (time.time() - start_time))

Редактировать

Когда я попробовал команду time cat file[1-4].csv > BigBoy в терминале, я получил следующий вывод. 0.08s user 4.57s system 60% cpu 7.644 total. То есть команда cat заняла около 4,5 секунд, а программа Python заняла 17,46 секунд. Я использовал 4 CSV-файла, каждый размером 116 МБ.

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

1 Ответ

2 голосов
/ 20 апреля 2020

Лучше использовать для этого csvstack из csvkit. Есть также много других вещей для работы с CSV-файлами из консоли.

csvstack file1.csv file2.csv ...
...