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

Python文本处理:如何将非'id:'开头的行追加至前一行

问题解决:合并文本文件中非起始行到前一行

问题背景

源文件内容:

uuid;UserGroup;Name;Description;Owner;Visibility;Members  ----> header of the file
id:;group1;raji;xyzabc;ramya;public;
abc
def
geh

id:group2;raji;rtyui;ramya;private
cvb
nmh
poi

用户使用的代码逻辑有误,当前错误输出:

id;group1;raji;xyzabc;ramya;public;uuid;UserGroup;Name;Description;Owner;Visibility;Members
id:group2;raji;rtyui;ramya;private;abc,def,geh

期望实现:保留表头,将所有不以id:开头的行追加到前一行末尾,最终输出:

uuid;UserGroup;Name;Description;Owner;Visibility;Members  ----> header of the file
id:;group1;raji;xyzabc;ramya;public;abc,def,geh
id:group2;raji;rtyui;ramya;private;cvb,nmh,poi

错误原因分析

  1. 表头未单独处理:代码未区分表头行,导致表头被错误合并到第一行数据中
  2. 条件判断无效:if not line.startswith('id:') and not None 逻辑冗余,and not None 永远为真,且表头行也会被判定为非id:行存入临时列表
  3. CSV写入方式错误:writer.writerows(output) 会将字符串拆分为字符列表写入,导致格式混乱

修正后的代码

output = []
temp = []

# 读取并处理文件
with open('usergroups.csv', 'r') as fo:
    lines = fo.readlines()
    if lines:
        # 单独处理表头
        header = lines[0].strip()
        output.append(header)
        # 从第二行开始处理数据行
        for line in lines[1:]:
            line = line.strip()
            if not line:
                continue  # 跳过空行
            if line.startswith('id:'):
                # 合并临时存储的附加内容到上一行
                if temp:
                    last_line = output.pop()
                    last_line += ";" + ",".join(temp)
                    output.append(last_line)
                    temp.clear()
                output.append(line)
            else:
                # 存储非id开头的附加行
                temp.append(line)
        # 处理最后一组未合并的附加内容
        if temp:
            last_line = output.pop()
            last_line += ";" + ",".join(temp)
            output.append(last_line)

# 打印结果
print("\n".join(output))

# 写入新文件
with open('new.csv', 'w') as f:
    f.write("\n".join(output))

代码说明

  • 表头单独提取:直接将第一行作为表头加入输出列表,避免参与数据行的合并逻辑
  • 合并逻辑修正:遇到id:开头的行时,先合并之前存储的附加内容到上一行,再将当前行加入输出;非id:行存入临时列表等待合并
  • 收尾处理:循环结束后,检查临时列表是否有剩余内容,确保最后一组附加行被合并
  • 写入优化:直接按行写入处理后的内容,避免CSV工具的格式拆分问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:45:25