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

如何将含空白的文本文件每5个元素合并为一行并转CSV?

问题:将含空白字段的文本转换为对齐的CSV

原始输入文本

Model
            
Series
            
Type
            
MY
            
ProdCode
          
          
            
              C 600 LEATHER X
              K96
              
              2065
              0132
            
          
            
              C 600 SUEDE US
              K64
              
              2085
              0132
            
          
            
              C 650 FAKE US
              K91
              
              2055
              0134


52I Swift White
              F56
              X20
              2235
              3C93

期望输出CSV

Model,Series,Type,MY,ProdCode
C 600 LEATHER X,K96, ,2065,0132
C 600 SUEDE US,K64, ,2085,0132
C 650 FAKE US,K91, ,2055,0134
52I Swift White,F56,X20,2235,3C93

原代码问题分析

原代码通过if item != ""跳过了空字符串,导致原本应该作为空白字段的项被忽略。比如第一组数据中Type字段对应的空行被跳过,使得每组的元素数量不足5个,后续字段会错位到前一行,最终出现整行偏移的问题。

修正后的代码

with open('output.txt', 'r') as file:
    # 处理每一行,保留空字符串(对应空白字段)
    lines = [line.strip() for line in file]

# 提取CSV表头:取前5个非空项
headers = [item for item in lines if item != ""][:5]
print(','.join(headers))

# 定位数据起始位置:跳过标题及中间的空行
data_start_idx = None
header_set = set(headers)
for idx, item in enumerate(lines):
    if item != "" and item not in header_set and data_start_idx is None:
        data_start_idx = idx

# 按每5个元素为一组生成CSV行
current_row = []
for item in lines[data_start_idx:]:
    current_row.append(item)
    if len(current_row) == 5:
        # 将空字符串替换为空格,匹配期望格式
        formatted_row = [x if x != "" else " " for x in current_row]
        print(','.join(formatted_row))
        current_row = []

代码说明

  1. 保留所有字段:不对空字符串做过滤,确保空白字段被当作有效字段保留。
  2. 正确提取表头:从所有非空项中取前5个,对应原始文本的标题行。
  3. 定位数据起始点:跳过标题和数据之间的空行,避免无效空元素干扰分组。
  4. 按组生成行:每收集5个元素就生成一行CSV,将空字符串替换为空格,完全匹配期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:43:11