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

如何优化Python中UTF-8转UTF-8-BOM的CSV转换代码以降低内存占用?

优化UTF-8 CSV转UTF-8-BOM的Python代码(低内存版本)

你的原代码通过一次性读取整个文件内容实现转换,处理大体积CSV文件时会占用大量内存,甚至引发内存不足问题。以下是两种低内存占用的优化方案:

方案一:逐行读取写入(适合需文本处理的场景)

这种方式每次仅在内存中保留一行数据,内存消耗几乎不受文件大小影响:

def convert_csv_to_utf8_bom(input_file_path, output_file_path, logger: Logger):
    """
    将UTF-8编码的CSV文件转换为UTF-8-BOM编码,低内存占用版本
    """
    logger.debug("convert csv to utf8 bom")
    # 同时打开输入输出文件,逐行处理
    with open(input_file_path, "r", encoding="utf-8") as infile, \
         open(output_file_path, "w", encoding="utf-8-sig") as outfile:
        for line in infile:
            outfile.write(line)

方案二:按块高效复制(适合纯编码转换场景)

利用shutil.copyfileobj进行块级复制,结合手动添加UTF-8 BOM,效率更高:

import shutil

def convert_csv_to_utf8_bom(input_file_path, output_file_path, logger: Logger):
    """
    将UTF-8编码的CSV文件转换为UTF-8-BOM编码,高效低内存版本
    """
    logger.debug("convert csv to utf8 bom")
    with open(input_file_path, "rb") as infile, \
         open(output_file_path, "wb") as outfile:
        # 写入UTF-8 BOM头(\xef\xbb\xbf)
        outfile.write(b'\xef\xbb\xbf')
        # 按块复制文件内容,默认块大小为16KB,可通过length参数调整(如length=1024*1024表示1MB块)
        shutil.copyfileobj(infile, outfile)

方案对比

  • 方案一:灵活性强,若后续需要对CSV每行内容做额外处理(如数据清洗),可直接在循环中扩展逻辑。
  • 方案二:性能更优,底层调用系统级IO操作,适合仅需添加BOM的纯编码转换场景。

两种方案均避免了一次性加载整个文件到内存,能轻松处理GB级别的大CSV文件,同时完美适配希伯来语的编码需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:36