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

如何按百分比随机拆分TXT文件为训练集、测试集与验证集

大型TXT文件随机拆分实现方案

以下两种方案都可完美处理5万行及以上的大文件,不会出现内存溢出问题,拆分比例严格遵循7:2:1要求。

方案1:Python 实现(全平台通用,可定制性强)

直接运行以下代码即可,支持固定随机种子保证拆分结果可复现:

import random

# 配置参数
INPUT_FILE = "你的源文件.txt"
TRAIN_RATIO = 0.7
TEST_RATIO = 0.2
DEV_RATIO = 0.1
RANDOM_SEED = 42  # 固定种子可保证每次拆分结果一致,不需要可删除

# 固定随机种子
if RANDOM_SEED:
    random.seed(RANDOM_SEED)

# 读取所有行(5万行仅占几MB内存,无加载压力)
with open(INPUT_FILE, 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 随机打乱行顺序
random.shuffle(lines)
total_lines = len(lines)

# 计算各数据集拆分边界
train_end = int(total_lines * TRAIN_RATIO)
test_end = train_end + int(total_lines * TEST_RATIO)

# 写入三个结果文件
with open("train.txt", 'w', encoding='utf-8') as f:
    f.writelines(lines[:train_end])
with open("test.txt", 'w', encoding='utf-8') as f:
    f.writelines(lines[train_end:test_end])
with open("dev.txt", 'w', encoding='utf-8') as f:
    f.writelines(lines[test_end:])

注意事项

  • 如果你的源文件是GBK/GB2312编码,把所有encoding='utf-8'参数改成encoding='gbk'即可
  • 如果需要保留源文件的表头,可提前单独读取第一行,分别写入三个输出文件的开头
  • 不需要固定拆分结果的话,删除RANDOM_SEED相关的两行代码即可

方案2:Linux/macOS 命令行实现(无需写代码,执行效率更高)

适合类Unix系统用户,几行命令即可完成拆分,十万行级文件也能秒处理:

# 1. 打乱所有行并存为临时文件
shuf 你的源文件.txt > shuffled_temp.txt
# 2. 计算源文件总行数
total=$(wc -l < shuffled_temp.txt)
# 3. 按比例拆分到三个结果文件
head -n $((total*7/10)) shuffled_temp.txt > train.txt
tail -n $((total*3/10)) shuffled_temp.txt | head -n $((total*2/10)) > test.txt
tail -n $((total*1/10)) shuffled_temp.txt > dev.txt
# 4. 删除临时文件
rm shuffled_temp.txt

注意事项

  • macOS 系统默认没有shuf命令,可通过brew install coreutils安装后,把命令中的shuf换成gshuf使用
  • 该方案默认按整数比例取行数,和精确比例的误差在个位数级别,对大文件来说可忽略

内容的提问来源于stack exchange,提问作者Kimi Shui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:27:00