吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 400|回复: 10
收起左侧

[求助] 一个关于Python合并大数据量表格,内存消耗过大的求助帖

[复制链接]
huaguoshanhouzi 发表于 2024-4-18 10:22
1、以下贴上代码,这个代码用于把文件夹里所有表格合并成一个表格                 

2、就是这个合并是可以运行的,但是在使用测试中观察到一个问题,就是在新建的表存放的数据太大了,内存占用已经超过了物理性能,就是想请教一下,有什么办法可以缩减一下占用的内存量。我的思路就是设置一个最高上限,到达上线就保存一次,后边清空掉内存占用的部分继续追加新的表
现在就是追加要打开表,那么内存占用又会回来。怎么才能清除内存占用,然后追加之后还能接续上。
拜谢大佬们提供一下思路或者解决方法


[Python] 纯文本查看 复制代码
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}")

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qinqin883 发表于 2024-4-25 16:47
找了半天才找到,很受启发;感谢风险
 楼主| huaguoshanhouzi 发表于 2024-4-25 16:07
你好,再见 发表于 2024-4-25 09:58
内存映射文件技术可以解决大文件操作问题,没了解过Python,你看看python有没有现成的模块可以使用

这个技术非常符合我的设计思路,谢谢,我研究研究
你好,再见 发表于 2024-4-25 09:58
内存映射文件技术可以解决大文件操作问题,没了解过Python,你看看python有没有现成的模块可以使用

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
huaguoshanhouzi + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| huaguoshanhouzi 发表于 2024-4-23 10:21
本帖最后由 huaguoshanhouzi 于 2024-4-23 10:23 编辑
塞北的雪 发表于 2024-4-22 18:58
如果是源表过多,那你应该处理完一个xls就关闭释放内存

这个方法实验了,确实可以减少一些内存占用。
Snipaste_2024-04-23_10-23-10.jpg
 楼主| huaguoshanhouzi 发表于 2024-4-23 10:16
小邑走天下 发表于 2024-4-22 21:21
可以使用with open(paixu_xl, 'r') as file:

如果使用这个打开方式的话,我要怎么操作合并这个数据呢,就我之前使用过这个方式,打开文件的方式有些原始,文件内存仍然会占用过大
小邑走天下 发表于 2024-4-22 21:24
如果数据量达到几百万行,建议使用csv格式,或者根据文件数量新建一个表格,数据量太大合成的表打开也会丢失数据的
小邑走天下 发表于 2024-4-22 21:21
可以使用with open(paixu_xl, 'r') as file:
塞北的雪 发表于 2024-4-22 18:58
如果是源表过多,那你应该处理完一个xls就关闭释放内存
 楼主| huaguoshanhouzi 发表于 2024-4-22 18:47
塞北的雪 发表于 2024-4-18 16:19
数据量大的话为什么不导出为csv文件呢

程序的内存使用量并没有减少多少,由于打开的文件就是xlsx格式的,所以就算把保存格式改成csv也影响不到内存占用。
Snipaste_2024-04-22_18-44-55.jpg
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 08:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表