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

使用csv.writer无法将字符拼接为字符串写入CSV文件的问题

问题:4位字母排列保存为CSV时格式不符合预期

我的代码:

import itertools
import csv

letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

combinations = list(itertools.permutations(letters, 4))
print(len(combinations))

with open('result.csv', 'w', newline='') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    for item in combinations:
        wr.writerow("".join(item))
    myfile.close()

当前CSV输出:

"A","B","C","D"
"A","B","C","E"
"A","B","C","F"
...

期望输出:

"ABCD"
"ABCE"
"ABCF"
...

单独打印"".join(item)能得到正确的字符串,但写入CSV就被拆分成多列了,该怎么解决?


解答

问题出在csv.writer.writerow()的参数规则上:这个方法要求传入可迭代对象(比如列表、元组),它会把对象里的每个元素当作CSV的一列。当你直接传拼接好的字符串(比如"ABCD")时,字符串本身属于字符的可迭代对象,所以它会把每个字符拆成单独的列,就出现了你看到的拆分结果。

解决方法很简单,把拼接后的字符串放到一个单元素列表里传给writerow(),这样它就会把整个字符串作为一列写入:

修正后的代码:

import itertools
import csv

letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

combinations = list(itertools.permutations(letters, 4))
print(len(combinations))

with open('result.csv', 'w', newline='') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    for item in combinations:
        # 将拼接后的字符串包裹在列表中,作为单列数据传入
        wr.writerow(["".join(item)])
    # 注意:with上下文管理器会自动关闭文件,无需手动调用myfile.close()

另外补充:你代码里的myfile.close()是多余的,with语句会在代码块执行完毕后自动处理文件关闭操作,手动调用反而可能引发不必要的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:42:11