如何将含空白的文本文件每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 = []
代码说明
- 保留所有字段:不对空字符串做过滤,确保空白字段被当作有效字段保留。
- 正确提取表头:从所有非空项中取前5个,对应原始文本的标题行。
- 定位数据起始点:跳过标题和数据之间的空行,避免无效空元素干扰分组。
- 按组生成行:每收集5个元素就生成一行CSV,将空字符串替换为空格,完全匹配期望的输出格式。
内容的提问来源于stack exchange,提问作者K997
相关产品推荐
相关产品推荐

