上亿行文本批量处理教程:本地 AI 一句话完成筛选、去重、排序、合并与拆分

大家好,这里是本地大模型,离线办公智能体广场最近我们很有激情地研究了一个问题:上亿行文本,能不能在本地、断网条件下稳定处理?

今天把这套方案和教程做个总结-------万能文本处理智能体-------

智能体全程离线运行,数据不出本机,依托流式引擎批量处理文本,覆盖预览、统计、筛选、删行、替换、清理、追加、提取、排序、合并、拆分、转码等 12 项能力;支持多步流水线。

 

一、需求分析

我准备了一份 2 亿行、约 28GB 的日志文本。这个体量下,常见 Windows 文本编辑器基本无法快速打开——要么长时间无响应,要么直接卡死。我们的智能体可以秒打开完成预览,效果如下:

image

image

 

现在需要对这份日志做一套完整处理,步骤如下:

阶段一:摸底(只读,不改文件)

  1. 预览前 20 行,确认日志格式、字段分隔、编码是否正常
  2. 统计总行数,掌握数据规模
  3. 统计含 ERROR 的行数,评估错误日志占比
  4. 统计空白行数量,判断清理工作量

阶段二:清洗(就地改写源文件)

  1. 删除所有空白行
  2. 去掉每行行首行尾的空白字符(日志常有尾随空格,影响正则匹配)
  3. WARN 统一替换成 WARNING(统一日志级别写法,便于后续筛选)

阶段三:提取与分流(写新文件,源文件保留)

  1. 用正则 ^ERROR 筛出以 ERROR 开头的行,写入 error.log
  2. 从 error.log 提取所有时间戳(正则 \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}),写入 error_timestamps.txt
  3. 把 error.log 按时间戳降序排列(最新的错误排最前)

阶段四:归档与验收

  1. 把排好序的 error.log 按每 100 万行拆成多个小文件(方便后续单独打开分析)
  2. 统计最终 error 文件总行数,与阶段一的数据交叉核对
 
需求里面已经涉及到了大多数文本的操作了, 下面我们看下如何完成这个需求。
 

二、实现方案一:小白上手

打开鲸闲办公智能体广场,找到 “文本智能助手”,如图:
注意,首次使用需要下载千问3模型到本地,后续可断网使用!!! 

image

 

获取: 宫中&浩气: “老罗软件”。首先,我们需要指定一个工作空间 , 智能体都是从这个工作空间里面找文件操作的。

然后就输入操作提示词就可以了, 我们简单给它三个任务步骤,如图:

image

 

 

然后点击执行就可以了, 2亿行,3个操作大约2分钟左右就可以执行完成! 大模型都是在本地进行推理的,全程可以不用联网!执行完成效果,如下:

image

 

三、支持的功能梳理

文本处理智能体适合处理日志、名单、配置文件、导出数据等文本。你不需要记命令,直接说出想做什么,它会自动完成处理。下面是支持的功能:

查看与统计

适合处理前先确认文件内容和规模。比如:

查看 data.log 前 20 行内容
统计 data.log 一共有多少行
统计 data.log 里含 ERROR 的行

这类操作只读,不会改动原文件。

筛选与删除

适合从大量文本里挑出需要的内容,或删掉不要的行。比如:

把 data.log 里含 ERROR 的行筛选到 错误.txt
提取以 ERROR 开头的行,输出 错误.txt
data.log 只保留含 INFO 的行,其它行删除
删除 data.log 里的所有空行
data.log 去重,保持原顺序

需要筛到新文件时,原文件会保留;需要直接改原文件时,也可以一句话说明。

替换与清理

适合批量改内容、整理格式。比如:

把 配置.env 里的 dev 全部替换成 prod
把 info 替换成 LOG,忽略大小写
去掉 messy.txt 每一行开头和结尾的空白字符
把 messy.txt 里连续多个空格压成一个
去掉 messy.txt 里的 HTML 标签

添加与提取

适合给文本补内容,或从文本里提取手机号、邮箱、网址等信息。比如:

给 订单.txt 每行行首加上 [订单]
给 订单.txt 每行行尾追加 <完成>
提取 data.log 里的手机号
从 客户资料.txt 提取所有邮箱地址,去重后写到 邮箱清单.txt

排序、合并与拆分

适合整理多个文件,或把大文件拆开处理。比如:

把 fruits.txt 按字典序升序排序
把 scores.txt 每行的数字按数值从大到小排序
把 第一章.txt、第二章.txt 和 第三章.txt 合并成 全书.txt
把 超大日志.log 每 1000 行拆成一个小文件

编码与换行

适合处理乱码、编码不统一、换行格式不一致的问题。比如:

把 data.log 转成 GBK 编码
把 gbk_data.txt 转成 UTF-8
把 data.log 的换行符改成 Windows 的 CRLF
帮我看看 乱码样本 目录里的文件是不是乱码

多步连续处理

一句话也可以包含多个步骤,智能体会按顺序自动执行。比如:

先删掉 data.log 的空行,再按字典序排序
把 应用.log 中含 ERROR 的行筛选到 错误行.txt,再把筛选结果按降序排序
先去掉 脏数据.txt 每行首尾空白,再删除空白行,最后统计剩余总行数

 

四、实现方案二:Python脚本

用 Python 做文本批量处理,对经常要整理日志、名单、配置文件、导出数据的人来说,很实用。

它适合这样的场景:手里有一批 .txt.log.csv 等文本文件,需要批量删空行、筛选关键词、替换内容、合并文件,或按条件导出结果,方便后续统计、归档和二次整理。规则固定、文件数量不多时,写个脚本往往比手工一个个改更快。

优势:

  • 可批量处理目录下大量文本文件,适合成批整理
  • 规则明确,处理结果稳定,重复执行一致
  • 本地运行,文件不出本机,适合内部资料和敏感文件
  • 可按需组合删行、筛选、替换、合并等操作
  • 不依赖大模型,处理速度快,成本低
  • 脚本可保存复用,后续同类任务直接再跑

劣势:

  • 需要一定 Python 基础,首次运行要安装环境
  • 每种需求都要自己写规则,不如自然语言灵活
  • 文件编码不统一时,可能出现乱码,需要手动指定编码
  • 多步骤复杂流程,脚本会越来越长,维护成本上升
  • 规则写错时,可能批量改坏文件,处理前最好先备份
  • 只适合规则明确的批处理,复杂语义理解不如智能体方便

下面是一个简单的 Python 实现示例:批量读取目录下的文本文件,删除空行,筛选含 ERROR 的行,并合并输出到一个新文件。如需替换、排序、拆分,可在此基础上继续扩展。

import os
from pathlib import Path

# 输入目录
input_root = r"path\to\your\text_files"
# 输出目录
output_root = r"path\to\your\output"
Path(output_root).mkdir(parents=True, exist_ok=True)

# 支持的文本格式
SUPPORTED_EXT = {".txt", ".log", ".csv", ".md"}

def read_lines(file_path: Path, encoding="utf-8"):
    """读取文件所有行"""
    with open(file_path, "r", encoding=encoding, errors="ignore") as f:
        return f.readlines()

def delete_blank_lines(lines):
    """删除空行"""
    return [line for line in lines if line.strip()]

def filter_lines(lines, keyword):
    """筛选包含关键词的行"""
    return [line for line in lines if keyword in line]

def replace_text(lines, old, new):
    """批量替换文本"""
    return [line.replace(old, new) for line in lines]

def save_lines(lines, output_path: Path):
    """保存结果"""
    output_path.parent.mkdir(parents=True, exist_ok=True)
    with open(output_path, "w", encoding="utf-8") as f:
        f.writelines(lines)

def process_file(file_path: Path):
    ext = file_path.suffix.lower()
    if ext not in SUPPORTED_EXT:
        print(f"跳过不支持的文件:{file_path}")
        return

    print(f"处理中:{file_path}")
    lines = read_lines(file_path)

    # 1. 删除空行
    lines = delete_blank_lines(lines)

    # 2. 筛选含 ERROR 的行
    error_lines = filter_lines(lines, "ERROR")

    # 3. 示例:把 INFO 替换成 LOG
    lines = replace_text(lines, "INFO", "LOG")

    # 每个文件单独输出
    cleaned_path = Path(output_root) / f"{file_path.stem}_cleaned{file_path.suffix}"
    error_path = Path(output_root) / f"{file_path.stem}_error.txt"

    save_lines(lines, cleaned_path)
    save_lines(error_lines, error_path)

    print(f"完成:{file_path}")
    print(f"  清理后文件 -> {cleaned_path}")
    print(f"  错误行文件 -> {error_path}")

def merge_files(file_paths, output_file: Path):
    """合并多个文本文件"""
    merged = []
    for file_path in file_paths:
        merged.extend(read_lines(file_path))
        merged.append("\n")
    save_lines(merged, output_file)
    print(f"合并完成 -> {output_file}")

def walk_files(root: Path):
    files = []
    for path in root.rglob("*"):
        if path.is_file() and path.suffix.lower() in SUPPORTED_EXT:
            files.append(path)
            process_file(path)
    return files

if __name__ == "__main__":
    all_files = walk_files(Path(input_root))

    # 可选:把所有文件合并成一个
    if all_files:
        merge_output = Path(output_root) / "merged_all.txt"
        merge_files(all_files, merge_output)

    print(f"全部处理完成,结果目录:{output_root}")

 

四、总结

文本批量处理已经能直接用于日常办公。本地智能体适合处理日志、名单、配置文件和导出数据,用自然语言说出需求即可,支持预览、统计、筛选、删改、提取、排序、合并、拆分和转码;本地运行、可断网使用,大文件也能稳定处理。

如果只是偶尔整理几个文件,或者需求经常变化,优先用智能体方案,省事、灵活,不用记命令。只有规则固定、同类任务反复做,或者要接入内部流程时,再考虑 Python 脚本。

处理结果里,预览和统计可直接参考;删改、筛选、提取类操作建议看一眼输出文件。涉及编码转换、多步流水线或特别大的文本时,关键内容归档前核对一遍更稳妥。

 

 

 

posted @ 2026-07-13 19:17  qq3993387644  阅读(16)  评论(0)    收藏  举报