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

