These days I use the openpyxl to write the large excel data.
数据包含3000行和3000列。我使用openpyxl的optimized writer将这个大矩阵写入excel,但它会抛出记忆错误。 我写的详细信息如下:
def write_xlsx_file(paths):
file_name = 'statis_block_base_info_.xlsx'
#print 'write the ' + str(month) + ' file:' + file_name
wb = Workbook(write_only = True)
path_ws = wb.create_sheet(0)
path_ws.title = 'path_links'
paths_row = len(paths)
for i in xrange(0, paths_row):
path_ws.append(paths[i])
wb.save(file_name)
答案 0 :(得分:1)
如果您收到内存错误,那么这可能意味着您的工作表中包含许多唯一字符串。在只写模式下,openpyxl会逐行序列化每一行,而3000个单元格不会占用大量内存。但是,字符串保存在中央字典中,在写入所有单元格之前无法序列化。但这应该只是在几乎每个单元格中都有不同的字符串的情况。如果是这种情况,则使用openpyxl的唯一解决方案是更多内存。
这是否描述了您的情况?使用了多少内存?其他库如xlsxwriter通过将字符串直接序列化为子对象来解决这个问题。所以你可能想尝试使用“常量内存”模式。
答案 1 :(得分:1)
如果您需要使用openpyxl转储大量数据,只有使用val nextWeekDate = udf {(startDate: DateType) =>
val day= date_format(startDate,'E'
if(day=='Sat' or day=='Sun'){
nextWeekDate = next_day(startDate,'Mon')
}
else{
nextWeekDate = date_add(startDate, 1)
}
}
选项无效,如openpyxl文档中所述,您需要安装lxml。
对我来说,安装lxml后,内存消耗从4GB以上减少到不足100MB
openpyxl文档(搜索lxml,你会发现建议):https://openpyxl.readthedocs.io/en/latest/optimized.html
使用pip安装lxml:
write_only=True