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

如何合并文本文件中符合条件的连续数字行并导出为CSV

处理文本文件生成目标CSV/空格分隔文件

你需要处理一份文本文件,提取连续的、以数字开头且不含“not eligible”的行,将这些行里的关键数字内容合并后导出为目标格式文件。

文本文件示例

Date Printed 09/21/22
Batch Number 1481499

109797295 Xie                           Wei Yan                       eligible 
3503  2   1   New Zealand Certificate in Aquatics
WARNING Name Mismatch: Xie Weiyan

120106533 Cheesbrough                   Joanne                        not eligible 
3507  4   1   New Zealand Certificate in Aquatics (Specialised Swim and Water Safety Teacher)
WARNING Name Mismatch: Cheesbrough Joanne Mary

123012179 Wood                          James Michael                 eligible 
3417  4   1   New Zealand Certificate in Entertainment and Event Technology


123012179 Wood                          James Michael                 eligible 
3417  3   1   New Zealand Certificate in Entertainment and Event Technology

预期输出

109797295 3503 2 1
123012179 3417 4 1
123012179 3417 3 1

你当前已能提取数字开头的行,但还不会过滤含“not eligible”的行,也不知道如何合并符合条件的连续行并写入目标文件,现有代码如下:

with open('qualstatusall.txt') as r:
    for line in r:
        if line and line[0].isdigit():  # no need to compare against True 
           print(line.strip())

完整实现代码(输出空格分隔格式)

with open('qualstatusall.txt', 'r') as input_file, open('output.txt', 'w') as output_file:
    current_user_id = None
    for line in input_file:
        stripped_line = line.strip()
        # 跳过空行
        if not stripped_line:
            continue
        
        # 处理用户ID行(数字开头)
        if stripped_line[0].isdigit():
            # 过滤含"not eligible"的行,重置ID避免后续匹配
            if 'not eligible' in stripped_line:
                current_user_id = None
                continue
            # 提取用户ID(第一个数字字段)
            current_user_id = stripped_line.split()[0]
        else:
            # 处理资格信息行,仅当有有效用户ID时才合并
            if current_user_id is not None and stripped_line[0].isdigit():
                # 提取资格行的前三个数字字段
                qual_fields = stripped_line.split()[:3]
                # 合并并写入文件
                output_file.write(f"{current_user_id} {' '.join(qual_fields)}\n")
                # 重置ID,防止重复匹配
                current_user_id = None

代码说明

  1. 过滤无效行:遇到数字开头且包含not eligible的行时,重置current_user_id,后续对应的资格行不会被处理。
  2. 配对连续行:用current_user_id暂存符合条件的用户ID,当遇到下一行数字开头的资格信息行时,将用户ID和资格字段合并写入。
  3. 跳过空行:避免空行干扰行的配对逻辑。

如果需要标准CSV格式(逗号分隔),可以改用Python内置的csv模块,代码如下:

import csv

with open('qualstatusall.txt', 'r') as input_file, open('output.csv', 'w', newline='') as output_file:
    csv_writer = csv.writer(output_file)
    current_user_id = None
    
    for line in input_file:
        stripped_line = line.strip()
        if not stripped_line:
            continue
        
        if stripped_line[0].isdigit():
            if 'not eligible' in stripped_line:
                current_user_id = None
                continue
            current_user_id = stripped_line.split()[0]
        else:
            if current_user_id is not None and stripped_line[0].isdigit():
                qual_fields = stripped_line.split()[:3]
                csv_writer.writerow([current_user_id] + qual_fields)
                current_user_id = None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:55:17