Проблема с объединением нескольких csv файлов

Короче говоря, суть в том, что у меня есть похожие в названиях cvs файлы. Их необходимо собрать в один. Например возьмём 2 файла первый: file_2019_11_01_n00131.csv

Отсчеты;Канал 0, В;
0;-0,195;
1;-0,107;
2;0,020;
3;0,205;
4;0,127;
5;0,000;
6;-0,234;

Второй file_2019_11_01_n00132.csv

Отсчеты;Канал 0, В;
0;0,215;
1;0,146;
2;-0,107;
3;-0,244;
4;-0,166;
5;0,049;
6;0,234;

Мой желаемы результат:

Отсчеты;Канал 0, В;Канал 0, В;
0;-0,195;0,215;
1;-0,107;0,146;
2;0,020;-0,107;
3;0,205;-,244;
4;0,127;-0,166;
5;0,000;0,049;
6;-0,234;0,234;

Результат, который получается в итоге:

Отсчеты;Канал 0, В;
0;-0,195;
1;-0,107;
2;0,020;
3;0,205;
4;0,127;
5;0,000;
6;-0,234;
Отсчеты;Канал 0, В;
0;0,215;
1;0,146;
2;-0,107;
3;-0,244;
4;-0,166;
5;0,049;
6;0,234;

Столбы не встают не рядом, а в конце первого столбца.

Вот моя функция:

 file_name = fd.askopenfilename()  # первый файл открыть
        fout = open("out.csv", "a") # куда сохраняем
        # первый файл:
        for line in open(file_name):
            fout.write(line)
        # остальные:
        for num in range(1, 5):
            f = open("file_2019_11_01_n0013" + str(num) + ".csv")
            # f.next() # skip the header

            for line in f:
                fout.write(line)
            f.close()

        fout.close()

Я догадываюсь, что нужно циклом добавлять по строчке, но не понимаю как это сделать. Подскажите пожалуйста, любая помощь будет очень ценна.


Ответы (1 шт):

Автор решения: MaxU

Используйте силу джедаев Pandas:

import pandas as pd
from pathlib import Path

work_dir = Path(r"C:\temp\data")
sep = ";"

def join_csv_files(files, **read_csv_kwargs):
    res = pd.concat([pd.read_csv(f, **read_csv_kwargs)
                     for f in files],
                    axis=1)
    return res

res = join_csv_files(work_dir.glob("*.csv"), sep=sep, usecols=[0,1], index_col=0)

res.to_csv(r"c:\temp\result.csv", sep=sep)

результат:

Отсчеты;Канал 0, В;Канал 0, В
0;-0,195;0,215
1;-0,107;0,146
2;0,020;-0,107
3;0,205;-0,244
4;0,127;-0,166
5;0,000;0,049
6;-0,234;0,234
→ Ссылка