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

Python按行分割文件:仅以行首4个整数作为分割规则需求

解决方案:仅以行首4位整数为分割标记分割大文件

要实现仅当行首存在恰好4个整数时触发分割,核心是精准定位行首的4位数字作为分割锚点,而非匹配任意位置的4位数字。下面以Python脚本为例,给出具体实现思路和代码:

核心逻辑

  • 遍历大文件的每一行,逐步累积内容块;
  • 用正则表达式精准匹配行首的连续4位整数(^(\d{4}));
  • 若匹配到行首4位整数:
    1. 若当前已有累积的内容块,将其写入一个新的小文件;
    2. 重置累积块,开始收集当前行中4位整数之后的内容;
  • 若未匹配到行首4位整数,直接将当前行内容追加到累积块;
  • 文件遍历结束后,将最后剩余的累积块写入最后一个小文件。

代码示例

import re

def split_large_file(input_file, output_prefix):
    # 匹配行首恰好4位整数的正则表达式
    line_start_pattern = re.compile(r'^(\d{4})')
    current_content_block = []
    output_file_index = 1

    with open(input_file, 'r', encoding='utf-8') as input_f:
        for line in input_f:
            # 保留换行符以外的内容,避免写入时出现多余空行
            cleaned_line = line.rstrip('\n')
            match_result = line_start_pattern.match(cleaned_line)
            
            if match_result:
                # 触发分割:先处理之前累积的内容块
                if current_content_block:
                    with open(f"{output_prefix}_{output_file_index}.txt", 'w', encoding='utf-8') as output_f:
                        output_f.write('\n'.join(current_content_block))
                    output_file_index += 1
                    current_content_block = []
                
                # 提取当前行中4位整数之后的有效内容(去掉开头4位和后续空格)
                content_after_split = cleaned_line[4:].lstrip()
                if content_after_split:
                    current_content_block.append(content_after_split)
            else:
                # 非行首4位整数的行,直接追加到当前块
                current_content_block.append(cleaned_line)
    
    # 处理最后剩余的内容块
    if current_content_block:
        with open(f"{output_prefix}_{output_file_index}.txt", 'w', encoding='utf-8') as output_f:
            output_f.write('\n'.join(current_content_block))

# 调用示例:替换为你的输入文件名和输出文件前缀
split_large_file("your_large_file.txt", "split_part")

针对你的示例输入验证

假设你的输入文件内容为:

1020 200123242151111231 bla bla bla 200123331231231441 bla bla bla
1030 200123242151111231 bla bla bla 200123331231231441 bla bla bla

运行脚本后会生成两个小文件:

  • split_part_1.txt内容:
    200123242151111231 bla bla bla 200123331231231441 bla bla bla
    
  • split_part_2.txt内容:
    200123242151111231 bla bla bla 200123331231231441 bla bla bla
    

如果你的输入是单行内容(如你给出的示例):

1020 200123242151111231 bla bla bla 200123331231231441 bla bla bla 1030 200123242151111231 bla bla bla 200123331231231441 bla bla bla

由于1030不在行首,脚本不会触发分割,只会生成一个包含所有内容(去掉行首1020)的文件。如果需要将单行中以空格分隔的4位整数开头的子串也作为分割点,可以调整正则逻辑,但这和你要求的“行首”条件不同,若有此需求可随时调整。

关键细节说明

  • 正则^(\d{4})确保只匹配行首的连续4位数字,完全避免误匹配行中间的4位数字;
  • 采用累积块写入的方式,避免一次性加载大文件到内存,适合处理超大文件;
  • 保留了非行首4位整数行的完整性,不会随意分割这类行的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:29:31