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

如何在Google Colab中高效合并大文本文件并优化RAM占用

内存友好的大文件合并方案

针对你遇到的内存占用过高问题,以下是几个实用的优化方案,兼顾内存控制和处理效率:

方案一:逐文件追加写入磁盘(最低内存占用)

不需要将所有文件同时加载到内存,而是逐个读取文件后直接追加写入到输出文件,内存中仅保留当前处理的单个文件数据:

import pandas as pd
import os

# 定义合并后的输出路径
output_file = "/content/drive/MyDrive/merged_AMI_data.txt"

# 先清空已存在的输出文件(避免重复追加)
if os.path.exists(output_file):
    os.remove(output_file)

# 遍历筛选后的文件列表,逐个处理
for file_path in result:
    # 读取单个文件
    df = pd.read_csv(file_path, sep='\t', header=None)
    # 追加写入到输出文件,index=False避免写入行号
    df.to_csv(output_file, sep='\t', header=None, mode='a', index=False)
    # 手动释放当前文件的内存
    del df

如果单个文件本身也很大,可以结合分块读取进一步降低内存占用:

for file_path in result:
    # 分块读取,每块10000行(可根据内存情况调整)
    for chunk in pd.read_csv(file_path, sep='\t', header=None, chunksize=10000):
        chunk.to_csv(output_file, sep='\t', header=None, mode='a', index=False)

方案二:指定数据类型压缩内存占用

Pandas默认会为列分配较大的数据类型(比如int64、float64),手动指定更紧凑的数据类型可以大幅降低单文件的内存占用,让合并后的DataFrame能适配Colab的内存:

  1. 先查看单个文件的列类型,确定优化空间:
# 读取第一个文件作为样本
sample_df = pd.read_csv(result[0], sep='\t', header=None)
print(sample_df.dtypes)
  1. 根据样本结果指定数据类型后合并:
# 示例:根据实际列类型调整,比如int列用int32,float列用float32,重复多的字符串列用category
dtype_config = {
    0: 'int32',
    1: 'float32',
    2: 'category'
}

# 带指定类型读取并合并
merged_data = pd.concat([
    pd.read_csv(f, sep='\t', header=None, dtype=dtype_config) 
    for f in result
])

方案三:用Dask进行并行分块处理

Dask是专为大数据设计的并行计算库,它会自动将数据分块处理,不会一次性加载全部数据到内存,同时支持并行运算提升效率:

import dask.dataframe as dd

# 读取所有筛选后的文件,自动分块
dask_df = dd.read_csv(result, sep='\t', header=None)

# 将合并后的数据写入磁盘
dask_df.to_csv(
    "/content/drive/MyDrive/merged_dask_data.txt",
    sep='\t',
    header=None,
    index=False,
    single_file=True  # 确保输出为单个文件
)

# 如果后续需要用Pandas处理(数据量不大时),可以转换为Pandas DataFrame
# pandas_df = dask_df.compute()

内容的提问来源于stack exchange,提问作者Pradya Panyainkaew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:30:49