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

Python使用pandas分块读1GB以上|分隔txt文件内存报错如何解决

问题原因

  • 核心bug是全局变量mylist没有在每次调用chunk_read时重置,每次读取新文件都会把之前所有文件的块再次追加到列表中,导致内存中重复存储多份全量数据,直接触发内存溢出
  • 读取了全部列数据,但最终只需要MurexCounterpartyRef一列,大量无关数据占用内存
  • 全量数据拼接完成后才做去空、去重操作,峰值内存占用过高
  • 100的chunksize过小,pandas读取小块数据的额外开销更高,反而会增加内存占用

解决方案

直接按最终需求优化读取逻辑,全程用集合存储结果自动去重,不需要加载全量DataFrame,内存占用可以降到原方案的1%以下,修改后代码如下:

import os
import re
import pandas as pd
from termcolor import colored

# 此处保留你原有的CoreMurexFilesLoc路径定义
CoreMurexFilesLoc = "你的文件存储目录路径"

def findmefile(directory, containsInFilename):
    entity_filenames = {}
    for file in os.listdir(directory):
        if containsInFilename in file:
            if file[:5] == "Trade":
                entity_filenames["MHI"] = file
            else:
                entity_filenames[re.findall("(.*?)_", file)[0]] = file
    return entity_filenames

# 获取核心Murex文件名
mhi_tradeFiles = findmefile(CoreMurexFilesLoc, "Trade")
mhi_tradeCashFiles = findmefile(CoreMurexFilesLoc, "TradeCash_")
mheu_tradeFiles = findmefile(CoreMurexFilesLoc, "MHEU")
mheu_tradeCashFiles = findmefile(CoreMurexFilesLoc, "MHEU_TradeCash")

# 定义待读取的文件列表
file_list = [
    (mhi_tradeFiles, "MHI"),
    (mheu_tradeFiles, "MHEU"),
    (mheu_tradeCashFiles, "MHEU"),
    (mhi_tradeCashFiles, "MHI")
]

# 用集合存储结果,自动全局去重,内存占用极低
counterparty_set = set()
chunksize = 10 ** 5 # 调整块大小为10万行,平衡读取速度和内存占用

for file_map, entity in file_list:
    file_path = os.path.join(CoreMurexFilesLoc, file_map[entity])
    for chunk in pd.read_csv(
        file_path,
        delimiter="|",
        usecols=["MurexCounterpartyRef"], # 只读取需要的列,大幅降低内存占用
        low_memory=False,
        chunksize=chunksize,
        on_bad_lines="skip" # 可选:跳过格式异常的长行,避免分词时内存溢出
    ):
        # 块内直接完成清洗:空值过滤、去重
        valid_values = chunk["MurexCounterpartyRef"].replace("", float("NaN")).dropna().unique()
        counterparty_set.update(valid_values)

# 转为需要的列表格式
counterpartiesList = list(counterparty_set)
print(colored('All Core Murex trade and tradeCash data loaded.', "green"))

如果仍然存在报错,可尝试进一步降低chunksize到1万行,避免单块内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:06:01