将csv批量转换为excel

问题描述 投票:0回答:1

我们已经编写了代码,但是效果不佳,它只能转换一列或更少的列。此过程将接收一个文件夹,并迭代所有.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') 
python python-3.x csv xlsxwriter bulk-load
1个回答
1
投票
使用pandas,单独获得的抽象值得转换。您正在使用的嵌套循环可能是问题的根源。

您的代码将成为:

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-显示1MB CSV文件的以下内容

每个循环992 ms±48.1 ms(平均±标准偏差,共运行7次,每个循环1次)

© www.soinside.com 2019 - 2024. All rights reserved.