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

如何使用Python将非规整student.txt数据按规则写入结构化student.csv?

实现方案

思路说明

  • 逐行读取原始txt文件,对每行做清洗:去除首尾空白、末尾多余逗号
  • 用临时变量存储当前正在处理的name、对应的sibling列表、hobby列表
  • 每次读取到新的name->条目时,先将上一个name的所有关联数据写入csv,再重置临时变量存储新的name
  • 所有行读取完成后,手动写入最后一个name的关联数据,避免遗漏
  • 写入时如果对应字段没有数据,统一填N/A;如果有多个值,按预期格式分行展示,非首行的对应前序列留白处理

完整实现代码

import csv

# 初始化临时存储变量
current_name = None
current_siblings = []
current_hobbies = []

# 读取txt文件,清洗每行格式
with open('student.txt', 'r', encoding='utf-8') as txt_file:
    lines = [line.strip().rstrip(',') for line in txt_file if line.strip()]

# 写入csv文件
with open('student.csv', 'w', encoding='utf-8', newline='') as csv_file:
    writer = csv.writer(csv_file)
    # 写入表头
    writer.writerow(['Name', 'Sibling', 'Hobbies'])
    
    for line in lines:
        # 遇到新的name条目,先写入上一个name的全量数据
        if line.startswith('name->'):
            if current_name is not None:
                # 计算当前name对应的行数,取sibling和hobby的数量最大值
                max_rows = max(len(current_siblings), len(current_hobbies), 1)
                for i in range(max_rows):
                    name_col = current_name if i == 0 else ''
                    sibling_col = current_siblings[i] if i < len(current_siblings) else ('N/A' if i == 0 and len(current_siblings) == 0 else '')
                    hobby_col = current_hobbies[i] if i < len(current_hobbies) else ('N/A' if i == 0 and len(current_hobbies) == 0 else '')
                    writer.writerow([name_col, sibling_col, hobby_col])
            # 重置临时变量存储新的name
            current_name = line
            current_siblings = []
            current_hobbies = []
        elif line.startswith('sibling->'):
            current_siblings.append(line)
        elif line.startswith('hobby_'):
            current_hobbies.append(line)
    
    # 写入最后一个name的全量数据
    if current_name is not None:
        max_rows = max(len(current_siblings), len(current_hobbies), 1)
        for i in range(max_rows):
            name_col = current_name if i == 0 else ''
            sibling_col = current_siblings[i] if i < len(current_siblings) else ('N/A' if i == 0 and len(current_siblings) == 0 else '')
            hobby_col = current_hobbies[i] if i < len(current_hobbies) else ('N/A' if i == 0 and len(current_hobbies) == 0 else '')
            writer.writerow([name_col, sibling_col, hobby_col])

效果说明

使用Python内置csv模块写入避免分隔符冲突,兼容性更强,最终输出的csv完全匹配你给出的预期格式:无对应值的字段自动填N/A,同组多值条目前列自动留空,格式对齐规整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:05