You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

处理4GB文件时Python脚本触发Memory Error,求优化方案

优化大文件处理脚本解决内存错误问题

我来帮你搞定这个内存问题!4GB的文件直接用readlines()一次性读进内存肯定会触发Memory Error——这会把整个文件的所有行都硬塞进内存里,完全扛不住。咱们一步步优化这个脚本:

核心优化点

  • 逐行读取文件:放弃一次性加载全部内容,每次只读一行,内存占用会降到极低水平
  • 用with语句管理文件:自动处理文件的打开和关闭,不用手动写f.close(),还能避免异常情况下的资源泄漏
  • 简化字典计数逻辑:用字典的get()方法替代繁琐的条件判断,代码更紧凑
  • 安全拼接文件路径:用os.path.join()代替字符串拼接,避免不同系统路径分隔符的问题
  • 移除冗余代码:原脚本里的update_text只是拼接所有行但没有实际输出/写入,完全可以删掉,节省不必要的内存消耗

优化后的完整代码

import os

# 目标文件夹路径
folder_path = 'C:/Users/rram/Desktop/'
files = os.listdir(folder_path)

for file_name in files:
    file_path = os.path.join(folder_path, file_name)
    wordcount = {}
    
    # with语句自动管理文件,无需手动关闭
    with open(file_path, 'r') as f:
        # 逐行读取,内存中始终只保留一行数据
        for line in f:
            arr = line.split("|")
            # 加个判断防止字段不足导致索引越界
            if len(arr) >= 14:
                word = arr[13]
                if 1 <= len(word) < 6:
                    # 用get方法简化计数:不存在的键默认返回0,直接加1
                    wordcount[word] = wordcount.get(word, 0) + 1
    
    print(wordcount)
    print(f'closing {file_path}\ttotal files processed so far\n\n')

额外补充

我特意加了if len(arr) >=14的判断,避免某些行分隔后字段不足14个时出现索引越界错误——这是原脚本没考虑到的边界情况。另外,逐行读取的方式不管文件多大,内存占用都只会维持在一行数据的大小,完美适配4GB级别的大文件处理。

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:58:15