一个关于Python合并大数据量表格,内存消耗过大的求助帖
1、以下贴上代码,这个代码用于把文件夹里所有表格合并成一个表格2、就是这个合并是可以运行的,但是在使用测试中观察到一个问题,就是在新建的表存放的数据太大了,内存占用已经超过了物理性能,就是想请教一下,有什么办法可以缩减一下占用的内存量。我的思路就是设置一个最高上限,到达上线就保存一次,后边清空掉内存占用的部分继续追加新的表,
现在就是追加要打开表,那么内存占用又会回来。怎么才能清除内存占用,然后追加之后还能接续上。
拜谢大佬们提供一下思路或者解决方法
import openpyxl
def merge_files(file_paths, save_interval):
try:
# 创建一个新的工作簿和工作表
wb_new = openpyxl.Workbook()
ws_new = wb_new.active
first_row = None
counts=0
for file_path in file_paths:
counts += 1
print(f"处理 {file_path}")
if file_path.endswith('.xlsx'):
# 读取 Excel 文件
wb = openpyxl.load_workbook(file_path)
ws = wb.active
if first_row is None:
first_row = next(ws.iter_rows(min_row=1, max_row=1, values_only=True))
ws_new.append(first_row)
# 逐行追加数据
for row in ws.iter_rows(min_row=2, values_only=True):
ws_new.append(row)# 将该行数据追加到新表中
# # 保存新文件
# if counts % save_interval == 0:
# wb_new.save(f'汇总.xlsx')
# wb_new.close()
# wb_new = None
# ws_new = None
# 检查已经合并的表数量,最大标准参数save_interval,如果到达最大合并上线就保存一次
# if counts==save_interval:
# counts=0
# wb_new.save(f'汇总.xlsx')
# ws_new = wb_new.active
wb_new.save(f'汇总.xlsx') print(f"筛选合并完成并保存至 汇总 文件夹中")
except Exception as e:
print(f"在处理时发生错误,错误原因:{e}") 找了半天才找到,很受启发;感谢风险 你好,再见 发表于 2024-4-25 09:58
内存映射文件技术可以解决大文件操作问题,没了解过Python,你看看python有没有现成的模块可以使用
这个技术非常符合我的设计思路,谢谢,我研究研究 内存映射文件技术可以解决大文件操作问题,没了解过Python,你看看python有没有现成的模块可以使用 本帖最后由 huaguoshanhouzi 于 2024-4-23 10:23 编辑
塞北的雪 发表于 2024-4-22 18:58
如果是源表过多,那你应该处理完一个xls就关闭释放内存
这个方法实验了,确实可以减少一些内存占用。 小邑走天下 发表于 2024-4-22 21:21
可以使用with open(paixu_xl, 'r') as file:
如果使用这个打开方式的话,我要怎么操作合并这个数据呢,就我之前使用过这个方式,打开文件的方式有些原始,文件内存仍然会占用过大 如果数据量达到几百万行,建议使用csv格式,或者根据文件数量新建一个表格,数据量太大合成的表打开也会丢失数据的 可以使用with open(paixu_xl, 'r') as file: 如果是源表过多,那你应该处理完一个xls就关闭释放内存 塞北的雪 发表于 2024-4-18 16:19
数据量大的话为什么不导出为csv文件呢
程序的内存使用量并没有减少多少,由于打开的文件就是xlsx格式的,所以就算把保存格式改成csv也影响不到内存占用。
页:
[1]
2