将大型Excel文件转换为CSV

时间:2017-11-13 08:25:54

标签: python excel csv openpyxl xlrd

在我的应用程序中,它从重csv文件中获取数据并将其上传到dataabse,我也需要从excel文件导入数据。为此,我首先使用xlrd将excel文件转换为csv,这对于小文件很有用,但在转换大文件时花了很多时间。当我给出一张6张,每张1米的文件时,我等了40分钟才结束这个过程,因为等待的时间太长了。

目前我正在使用openmyxl库将Excel文件转换为csv,这个库明显快于xlrd,尤其是在read-only模式下,但遗憾的是,即使是转换重文件需要8-10分钟。

有没有时间在Python中有效的解决方案,我可以转换多张表的大型Excel文件,而不必等待几分钟?

这是我目前正在使用的代码:

def convertExcelToCSV(excelFilePath, uploadFilePath):

lstCSVFilePaths = []

workbook = load_workbook(excelFilePath, read_only=True)

for worksheet_name in workbook.get_sheet_names():        
    worksheet = workbook.get_sheet_by_name(name = worksheet_name)        

    #skip sheet if empty
    if worksheet.rows == 0: continue        

    objCSV = {}

    objCSV["fileName"] = worksheet_name + '.csv'
    objCSV["isGZip"] = False

    csvFilePath = uploadFilePath + "CSV Files/"

    #make directory for CSV files that will be made from Excel file
    if not os.path.exists(csvFilePath):        
        os.makedirs(csvFilePath)

    fd, csvFilePath = tempfile.mkstemp(suffix=worksheet_name + ".csv", dir=csvFilePath)

    objCSV["filePath"] = csvFilePath

    with open(csvFilePath, 'w', newline="") as your_csv_file:            
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)            
        for rownum in worksheet.rows:      
            wr.writerow([cell.value for cell in rownum])

    your_csv_file.close()

    lstCSVFilePaths.append(objCSV)

return lstCSVFilePaths

1 个答案:

答案 0 :(得分:0)

使用只读模式,您应该能够阅读工作表并并行写入CSV。除此之外我不认为可以做很多事情:将XML转换为Python可能是瓶颈。