Python按行分割文件:仅以行首4个整数作为分割规则需求
解决方案:仅以行首4位整数为分割标记分割大文件
要实现仅当行首存在恰好4个整数时触发分割,核心是精准定位行首的4位数字作为分割锚点,而非匹配任意位置的4位数字。下面以Python脚本为例,给出具体实现思路和代码:
核心逻辑
- 遍历大文件的每一行,逐步累积内容块;
- 用正则表达式精准匹配行首的连续4位整数(
^(\d{4})); - 若匹配到行首4位整数:
- 若当前已有累积的内容块,将其写入一个新的小文件;
- 重置累积块,开始收集当前行中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 blasplit_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
相关产品推荐
相关产品推荐

