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
相关产品推荐
相关产品推荐

