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

Python CSV Writer代码错误在字符间加分隔符而非字符串的问题

解决CSV写入时字符被拆分或整行成一列的问题

嘿,我一眼就看出问题出在哪了——你把csv.writer的用法搞反啦!

你现在的问题根源在于:

  • 当你调用write.writerow(line)时,line是一个字符串,writerow会把字符串当成可迭代对象,逐个字符拆分,所以每个字符都被逗号隔开,就出现了那种乱糟糟的输出。
  • 改成write.writerow([line])后,整个字符串被当成了单个元素,自然Excel里只显示1列。

正确的做法其实超简单:

根本不需要手动用','.join(r)拼接字符串!直接把你组装好的列表r传给writerow()就行。csv.writer会自动帮你用指定的分隔符(这里是逗号)把列表里的每个元素对应到CSV的一列,完美符合你的需求。

修正后的完整代码:

import csv

def csv_reader(file, path):
    with open(path, 'w') as f1, open(file, 'r') as f2:
        write = csv.writer(f1, delimiter=',')
        # 注意这里的reader配置,确保正确读取制表符分隔的输入
        read = csv.reader((line.replace('\0','') for line in f2), delimiter="\t")
        i = 1
        for row in read:
            if len(row) == 0:
                continue
            if row[3] == "Trade":
                continue
            else:
                if row[6] == "":
                    r = [row[0], row[0], 'A', row[8], row[9], row[0]]
                    print(','.join(r))  # 打印可以保留拼接后的结果看效果
                    write.writerow(r)  # 直接传入列表r
                else:
                    r = [row[0], row[0], 'B', row[6], row[7], row[0]]
                    print(','.join(r))
                    write.writerow(r)  # 直接传入列表r

if __name__ == "__main__":
    path = "sales.csv"
    csv_path = "FlowEdge-TRTH-Time_Sales.csv"
    csv_reader(csv_path, path)

为什么这样能行?

writerow()的设计就是接收一个元素序列(比如列表),序列里的每个元素对应CSV的一列。你之前手动拼接成字符串,反而让writerow把字符串拆成了单个字符的序列,完全违背了它的用法。直接传列表,每个元素会被正确识别为一列,Excel打开后就能看到你想要的6列结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:21