Конвертировать CSV в Excel оптом - PullRequest
0 голосов
/ 10 января 2020

Мы написали код, но он не работает хорошо, он просто конвертирует один столбец или меньше. Эта процедура получает папку и выполняет итерацию всех файлов .csv, преобразовывая их в .xlsx

import csv
import glob
from openpyxl import Workbook
from pathlib import Path
import os 

def convert_csv_to_xlsx(arg1):
    wb = Workbook()
    sheet = wb.active
    p = Path(arg1) 
    CSV_SEPARATOR = ","
    for fname in glob.glob(arg1):
        p1=Path(fname)
        if os.path.exists(fname):
            with open(fname) as f:
                reader = csv.reader(f)
                for r, row in enumerate(reader):
                    for c, col in enumerate(row):
                        for idx, val in enumerate(col.split(CSV_SEPARATOR)):
                            cell = sheet.cell(row=r+1, column=idx+1)
                            cell.value = val
                print('Se ha creado el archivo: ' + (str(p.parent) + str(p.root) + str(p1.stem) + ".xlsx"))
                wb.save(str(p.parent) + str(p.root) + str(p1.stem) + ".xlsx")


convert_csv_to_xlsx(r'C:\ysingh\sacoop\dscoopb\coopac-e\201812-e\*.csv') 

1 Ответ

1 голос
/ 10 января 2020

@K.CI ответ, если он ответ, должен быть принят, поскольку он, очевидно, предложил то же самое.

Используйте pandas, полученная абстракция стоит преобразования. Используемый вами вложенный l oop, вероятно, является источником ваших проблем.

Ваш код становится следующим:

import pandas as pd
def convert_csv_to_xlsx(arg1):
    for fname in glob.glob(arg1):
        pd.read_csv(fname).to_excel("{}.xlsx}.format(fname))

% timeit - показывает следующее для CSV-файла 1 МБ

992 мс ± 48,1 мс на л oop (среднее ± стандартное отклонение из 7 прогонов, 1 л oop каждый)

...