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

Python中TXT转CSV拆分异常问题排查

问题分析与解决

你遇到的CSV格式异常问题,核心是对csv模块写入方法的输入格式要求理解偏差,再加上代码里的几个细节漏洞,我们一步步拆解修复:

错误点详解

  1. 表头写入逻辑错误
    writer.writerow('title')中,你传入了一个字符串,但writerow要求接收可迭代的列集合(比如列表)。当传入字符串时,Python会把它当作字符的迭代器,每个字符都会被当成单独一列,导致title被拆成t,i,t,l,e。

  2. 条目写入逻辑错误
    writer.writerows(lines)里,lines是拆分得到的字符串列表。writerows会遍历每个元素,若元素是字符串,同样会被拆成单个字符作为列,这就是为什么每个名字会变成B,o,b,o, S,o,s,o,(b,o,b,o,s,o,s,o)。

  3. 文件读取的覆盖问题
    你的代码里for line in in_file: lines = line.split(', ')会每次循环覆盖lines变量,最终lines只会保留文件最后一行的拆分结果,前面的行都会被丢弃。

修正后的代码

import csv

# 初始化列表存储所有拆分后的条目
all_items = []
with open('test1.txt', 'r') as in_file:
    for line in in_file:
        # 去除每行首尾空白(比如换行符),避免拆分出空字符串
        stripped_line = line.strip()
        if stripped_line:  # 跳过空行
            items = stripped_line.split(', ')
            all_items.extend(items)

with open('log.csv', 'w', newline='') as out_file:
    writer = csv.writer(out_file)
    # 表头传入列表,确保作为单列写入
    writer.writerow(['Name'])
    # 每个条目包装成单元素列表,让每个条目占一行一列
    writer.writerows([[item] for item in all_items])

额外优化说明

  • 加入newline=''是csv模块的官方推荐写法,能避免Windows系统下生成的CSV出现多余空行。
  • line.strip()和if stripped_line:用来处理文件中的空行和首尾空白,让代码更健壮。
  • [[item] for item in all_items]通过列表推导式把每个字符串包装成单元素列表,确保writerows将每个条目作为完整的一行写入,不会拆分字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:42:58