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

Python处理50GB大文件转换EOL时遇MemoryError求助

解决大文件换行符转换时的MemoryError问题

你遇到的MemoryError问题根源很直接:你一次性把50GB的文件全部读进内存了,普通电脑的内存根本装不下这么庞大的数据,直接就爆内存了。你的代码逻辑在小文件上完全没问题,但面对几十GB的大文件就不适用了。

正确的处理思路:逐行处理,避免内存过载

处理超大文件的核心原则是分块/逐行读写,每次只处理一小部分数据,这样内存占用会维持在很低的水平。这里给你两种可靠的实现方式:

方式一:逐行读取并写入临时文件(最稳妥)

import shutil

# 注意路径前加r,避免转义字符解析错误
filename = r"D:\AddressEvaluation\AddressStandardization\infu\InfutorFile.txt"
temp_filename = r"D:\AddressEvaluation\AddressStandardization\infu\InfutorFile_temp.txt"

# 使用with语句自动管理文件句柄,无需手动close
with open(filename, 'r') as infile, open(temp_filename, 'w', newline='\n') as outfile:
    # 逐行读取原文件,直接写入新文件(Python会自动转换换行符)
    for line in infile:
        outfile.write(line)

# 用临时文件替换原文件,避免处理中途出错损坏原文件
shutil.move(temp_filename, filename)

方式二:分块读取(适合极端大文件)

如果你的文件里没有明确的换行符(或者想更快处理),可以按固定大小的块来读取:

import shutil

filename = r"D:\AddressEvaluation\AddressStandardization\infu\InfutorFile.txt"
temp_filename = r"D:\AddressEvaluation\AddressStandardization\infu\InfutorFile_temp.txt"

# 每次读取1MB的块,可根据内存情况调整
chunk_size = 1024 * 1024

with open(filename, 'rb') as infile, open(temp_filename, 'wb') as outfile:
    while True:
        chunk = infile.read(chunk_size)
        if not chunk:
            break
        # 替换Windows换行符\r\n为Linux的\n
        chunk = chunk.replace(b'\r\n', b'\n')
        outfile.write(chunk)

shutil.move(temp_filename, filename)

额外注意点

  • 路径前一定要加r(原始字符串标记),不然路径里的\A、\i会被Python当成转义字符,导致文件找不到
  • 用临时文件过渡是为了安全:如果处理过程中程序崩溃,原文件不会被损坏
  • 不要直接覆盖原文件进行写入,风险极高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:21:26