Openpyxl在保存时消耗大量内存,而且保存文件要花费很多时间

时间:2018-08-30 14:54:03

标签: python-3.x pandas openpyxl

我正在尝试自动生成一些报告。我的第一个方法是读取具有更新数据的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)

0 个答案:

没有答案