使用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
,以便每个字符都可以写入?
答案 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
将其参数视为可迭代的,因此如果传递一个字符串,它将看到它就好像每个字符都是行中的一个元素;但是,您希望整个字符串成为一个项目,因此您必须将其括在列表或元组中。
csv.writer
,如其他答案所示。