2014-09-29 77 views
1

使用CSV编写器,我试图写一个字符串列表文件。For循环中的整个字符串,而不仅仅是字符

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

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回路分别分析每一个字符和H我可以将整个字符串一起传递到csv.writer,这样每个字符都可以写出来吗?

+1

打电话给你的清单“list”是个坏主意 – khelwood 2014-09-29 16:58:35

+0

与'sectionlist'相关的'list'(不要用你自己的变量的名字)是怎么回事? – jonrsharpe 2014-09-29 16:58:57

+0

实际文件是一个人口统计数据的列表,它适合于csv写作,因为我希望能够在excel中对其进行编辑。如果将其作为文本文件编写更容易并完成相同的任务,请告诉我!谢谢 – foursuits 2014-09-29 16:59:04

回答

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

+0

谢谢!这是对我的代码进行的最简单的编辑!你教了我一些有价值的东西:) – foursuits 2014-09-29 17:05:35

1

它看起来不像你甚至需要使用CSV作家。

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) 
0

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

修复sectionlist使得它是一个字符串(行)的列表的列表所以i将字符串的列表,包装每个字在列表作为writerow参数一起使用时,或简单地不要使用writerow,其中预计字符串列表

中平凡,以下结构将正确保存:

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