处理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
相关产品推荐
相关产品推荐

