我们已经编写了代码,但是效果不佳,它只能转换一列或更少的列。此过程将接收一个文件夹,并迭代所有.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')
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次)