Python 将大型Excel文件转换为CSV

Python 将大型Excel文件转换为CSV,python,excel,csv,openpyxl,xlrd,Python,Excel,Csv,Openpyxl,Xlrd,在我的应用程序中,从繁重的csv文件中获取数据并上传到dataabse,我还需要从excel文件中导入数据。为此,我首先使用xlrd将excel文件转换为csv,这对小文件非常有效,但在转换大文件时却花费了大量时间。当我给一个6张纸的文件,每一行1米时,我等待了40分钟才终止这个过程,因为等待的时间太长了 目前,我正在使用openmyxl库将excel文件转换为csv,该库的速度明显快于xlrd,尤其是在只读模式下,但遗憾的是,即使是转换重文件的8-10分钟延迟也太多 Python中是否有任何节

在我的应用程序中,从繁重的csv文件中获取数据并上传到dataabse,我还需要从excel文件中导入数据。为此,我首先使用
xlrd
将excel文件转换为csv,这对小文件非常有效,但在转换大文件时却花费了大量时间。当我给一个6张纸的文件,每一行1米时,我等待了40分钟才终止这个过程,因为等待的时间太长了

目前,我正在使用
openmyxl
库将excel文件转换为csv,该库的速度明显快于
xlrd
,尤其是在
只读模式下,但遗憾的是,即使是转换重文件的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

在只读模式下,您应该能够并行读取工作表和写入CSV。除此之外,我认为没有什么可以做的:将XML转换为Python可能是瓶颈。

使用只读模式,您应该能够并行地读取工作表和编写CSV。除此之外,我认为没有什么可以做的:将XML转换为Python可能是瓶颈。

尝试使用
pandas
。您还将得到一个更短的代码:
import pandas as pd;df=pd.read_excel('/path/to/excel.xlsx');df.to_csv('/path/to/csv_file.csv')
@DeepSpace由于熊猫在内部使用xlrd读取文件并将行转换为列,这不是一个好主意。所以我尝试了这个方法。原来
pandas
甚至比
openpyxl
还要慢。一个6页(每行10万行)的文件已经有7分钟多了,而且还在计数。浏览熊猫只会占用更多的内存。xlrd实际上比openpyxl占用的内存更少,但正如您所看到的,它在开始之前会读取整个工作簿。请尝试使用
pandas
。您还将得到一个更短的代码:
import pandas as pd;df=pd.read_excel('/path/to/excel.xlsx');df.to_csv('/path/to/csv_file.csv')
@DeepSpace由于熊猫在内部使用xlrd读取文件并将行转换为列,这不是一个好主意。所以我尝试了这个方法。原来
pandas
甚至比
openpyxl
还要慢。一个6页(每行10万行)的文件已经有7分钟多了,而且还在计数。浏览熊猫只会占用更多的内存。xlrd实际上比openpyxl占用的内存更少,但正如您所看到的,它在开始之前会读取整个工作簿。如何并行执行此操作?您需要使用
asyncio
编写协同例程,一个协同例程只会生成工作表。如何并行执行此操作?您需要使用
asyncio
编写协同例程共同例程只生成工作表。