You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改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

火山引擎 最新活动