在我的应用程序中,它从重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
答案 0 :(得分:0)
使用只读模式,您应该能够阅读工作表并并行写入CSV。除此之外我不认为可以做很多事情:将XML转换为Python可能是瓶颈。