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

Linux下按Header分割文件为独立Chunk的技术求助

文件分割实现方案

核心思路

  • 把以Header开头的行作为每个chunk的分界点
  • 每个chunk包含当前Header行,以及后续所有非Header行,直到遇到下一个Header为止

Python 脚本实现(简单直接)

这个方法不需要复杂正则,按行处理更直观:

def split_file(input_file):
    current_chunk = None
    chunk_num = 1
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            # 保留原始换行格式,只去掉读取时自动加的额外换行
            raw_line = line.rstrip('\n')
            # 遇到Header就切换新文件
            if raw_line.startswith('Header'):
                if current_chunk:
                    current_chunk.close()
                chunk_path = f'stream{chunk_num}.chunk'
                current_chunk = open(chunk_path, 'w', encoding='utf-8')
                chunk_num += 1
            # 只要当前有打开的文件,就写入行内容
            if current_chunk:
                current_chunk.write(raw_line + '\n')
    # 关闭最后一个chunk文件
    if current_chunk:
        current_chunk.close()

# 替换成你的原始文件名
split_file('original_file.txt')

正则表达式方案(修正版)

如果一定要用正则,之前的lookaround没成功可能是没处理跨行匹配,试试这个:

import re

def split_with_regex(input_file):
    with open(input_file, 'r', encoding='utf-8') as f:
        full_content = f.read()
    # 匹配从Header开始,到下一个Header前或文件结尾的所有内容
    chunk_list = re.findall(r'(Header.*?)(?=\nHeader|$)', full_content, re.DOTALL)
    # 逐个写入chunk文件
    for index, chunk_content in enumerate(chunk_list, 1):
        with open(f'stream{index}.chunk', 'w', encoding='utf-8') as chunk_file:
            # 清理多余换行,保证格式和原始一致
            chunk_file.write(chunk_content.rstrip('\n') + '\n')

# 替换成你的原始文件名
split_with_regex('original_file.txt')

正则说明

  • Header.*?:非贪婪匹配,从Header开始抓取内容,避免过度匹配
  • (?=\nHeader|$):正向预查,遇到换行+Header或者文件结尾就停止,不会把下一个Header包含进来
  • re.DOTALL:让正则的.能匹配换行符,实现跨行抓取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:53:25