For循环中的整个字符串,而不仅仅是逐个字符

时间:2014-09-29 16:54:23

标签: python string csv for-loop

使用CSV编写器,我正在尝试将字符串列表写入文件。

每个字符串应占据一个单独的行。

sectionlist = ["cat", "dog", "frog"]

当我实现以下代码时:

with open('pdftable.csv', 'wt') as csvfile:
        writer = csv.writer(csvfile, delimiter=',')
        for i in sectionlist:
            writer.writerow(i)

我创建

c,a,t
d,o,g
f,r,o,g

我想要的时候

cat
dog
frog

为什么for循环分别解析每个字符,如何将整个字符串一起传递到csv.writer,以便每个字符都可以写入?

3 个答案:

答案 0 :(得分:1)

看起来你甚至不需要使用csv writer。

l = ["cat", "dog", "frog"]        # Don't name your variable list!
with open('pdftable.csv', 'w') as csvfile:
    for word in l:
        csvfile.write(word + '\n')

或@ GP89建议

with open('pdftable.csv', 'w') as csvfile:
    csvfile.writelines(l)

答案 1 :(得分:0)

问题是i表示字符串(字),而不是列表(行)。字符串在Python中也是可迭代的序列(字符),因此CSV函数接受它没有错误的对象,即使结果是“奇怪的”。

修复sectionlist,使其成为字符串列表(行),以便i成为字符串列表,换行用作writerow参数时,列表中的每个单词,或者只是不使用需要字符串列表的writerow

平凡地说,以下结构将被正确保存:

sectionlist = [
    ["cat", "meow"],
    ["dog"],
    ["frog", "hop", "pond"]
]

答案 2 :(得分:0)

我认为你需要的是:

with open('pdftable.csv', 'wt') as csvfile:
    writer = csv.writer(csvfile, delimiter=',')
    for i in sectionlist:
        writer.writerow([i]) # note the square brackets here

writerow将其参数视为可迭代的,因此如果传递一个字符串,它将看到它就好像每个字符都是行中的一个元素;但是,您希望整个字符串成为一个项目,因此您必须将其括在列表或元组中。

PD:那就是说,如果您的特定情况不比您发布的情况复杂,您可能根本不需要csv.writer,如其他答案所示。