如何修改Python大文件编码转换代码实现逐行读写?
解决大文本文件编码转换时的MemoryError问题
完全理解你的问题,你对逐行读写的理解是完全正确的——就是每次从源文件读取一行内容,立刻写入目标文件,循环这个过程直到整个文件处理完成,这样就不会把几个GB的文件一次性塞进内存里,自然就不会触发MemoryError了。
咱们来修改你的代码,核心就是把一次性读取整个文件的f.read()改成逐行遍历的逻辑:
import os # 别忘了加上这个导入,否则os.listdir会报错 path = 'path/to/file' des_path = 'path/to/store/file' for filename in os.listdir(path): # 用os.path.join拼接路径更安全,适配不同系统的路径分隔符 src_file_path = os.path.join(path, filename) des_file_path = os.path.join(des_path, filename) # 以指定编码打开源文件,逐行读取 with open(src_file_path, 'r', encoding='iso-8859-11') as f: # 打开目标文件,建议明确指定目标编码(比如utf-8),避免系统默认编码导致乱码 with open(des_file_path, 'w', encoding='utf-8') as t: # 逐行遍历源文件,读一行写一行,内存仅保留当前行数据 for line in f: t.write(line)
关键修改点说明:
- 用
os.path.join()替代字符串格式化拼接路径,能避免Windows/Linux路径分隔符差异带来的错误 - 嵌套使用
with语句,无需手动调用close(),Python会自动处理文件的关闭操作,更稳妥可靠 - 替换
f.read()为for line in f:,这是Python处理文本文件最高效的逐行读取方式,内存占用始终保持在极低水平 - 目标文件明确指定编码(示例中为
utf-8),避免依赖系统默认编码导致的乱码问题,你可以根据实际需求调整目标编码
这样修改后,不管你的文件是5GB还是更大,都能平稳处理,不会再出现内存溢出的问题。
内容的提问来源于stack exchange,提问作者emp




