我正在尝试自动生成一些报告。我的第一个方法是读取具有更新数据的csv文件,然后使用熊猫使用数据透视表生成整个Excel。
由于报告的复杂性,这不是最好的主意,因此我决定使用基本模板,并将处理后的数据转储到基于模板的新文件中的工作表中。此方法行之有效,只是占用了过多的资源(RAM和时间),但是直到今天遇到“内存错误”时,这才成为问题。
寻找解决方案后,我发现我正在转储的数据量很大,而模板本身就是问题的根本原因。
这是我目前正在做的事情的简化方法:
# Load the data
data = pd.read_csv(data_path)
# Do some processing to agregate data
processed_data = process_data(data)
# Open the template
wb = load_workbook(template_path, keep_vba=True)
# Copy to the template the processed data
processed_data_rows = dataframe_to_rows(processed_data, index=False)
ws = self.wb['data']
for r_idx, row in enumerate(processed_data_rows, 1):
for c_idx, value in enumerate(row, 1):
if value is None:
ws.cell(row=r_idx, column=c_idx, value='')
else:
ws.cell(row=r_idx, column=c_idx, value=value)
# Save the data to the new file
wb.save(path)
在搜索中,我发现我可以对read_only和write_only使用一些读/写优化,但是找不到将工作表从加载的模板复制到我在新文件中创建的Excel报表中的方法。
关于如何解决此问题的任何想法?
PS:已加载的csv大约有3万行和140列。
编辑:输出文件大小约为12Mb(甚至不接近脚本使用的1.80〜2.3Gb)