2016-04-05 243 views
1

我遇到了以我想要的方式编写csv文件的问题。将元组列表写入CSV文件

说明:

我有3名单:

list1=[1,2,3] 

list2=['dd1','dd2','dd3'] 

list3=['vi1','vi2','vi3'] 

我想写我的csv文件,如:

 Column 1| Column 2| Column 3 
Row 1  1|  dd1|  vi1 
Row 2  2|  dd2|  vi2 
Row 3  3|  dd3|  vi3 

所以我用zip方法是这样的:

csvd = zip(list1, list2, list3) 

荏苒我之后有:

csvd = [(1, 'dd1', 'vi1'), (2, 'dd2', 'vi2'), (3, 'dd3', 'vi3')] 

而接下来我使用CSV作家是这样的:

with open('path\\test.csv', 'w') as f: 
    writer = csv.writer(f, delimiter='\t') 
    writer.writerows(csvd) 

这是我的输出: csv

第一件事情是,有在每一个touple第一列(我想要每个元素的touple在不同的列)。 第二个问题是我在下一个touples之间有空行。

我试图解决我的问题,只是writerowfor loop但这只是解决方案,我的第二个问题,这种方法,我仍然有第一列的每一个问题。

+0

我得到了列表的列表,而不是列表。 –

+0

我想你可能会从错误分隔符的excel中读取你的csv文件。 –

回答

4

不知道的空白行,但它可能是因为该行终止。明确地将其设置为'\ n'可能会有所帮助。

关于Excel中的列问题:Excel使用';'作为列分隔符默认情况下。这可以在Excel中更改,但也可以更改用于列分隔符的字符。

笔者通话将改变线路终端和列分隔符:

writer = csv.writer(f, delimiter=';', lineterminator='\n') 

看看是否有帮助。

+0

这就是它!谢谢你。 –

0

试试这个:

with open('path\\test.csv', 'wb') as f: 
+0

在将'w'改为'wb'后,空行消失了,但是我仍然在第一列中获得了所有元素的第一列 –

+0

@ K.Maj嗯,我不能重现这一点,我的文件是用这个改变制表符分隔的。如果你使用','作为分隔符,你是否也遇到同样的问题?这不仅仅是一个擅长进口的问题? – bananafish

+0

'writer = csv.writer(f,delimiter =';',lineterminator ='\ n')'解决了我的问题。 –

0

你只需要循环的行和列当你写出来的CSV:

with open('test.csv', 'w') as f: 
    writer = csv.writer(f, delimiter='\t') 
    for row in csvd: 
     for i, column in enumerate(row): 
      f.write(str(column)) 

      if i != len(row)-1: 
       f.write(',') 
     f.write('\n') 

上述会给你一个CSV文件:

1,dd1,vi1 
2,dd2,vi2 
3,dd3,vi3 

编辑:

不能相信我没有注意到这一点,但是你的空格是因为你已经将作者设置为制表符分隔。只要改变你原来的代码:

with open('test.csv', 'wb') as f: 
    writer = csv.writer(f, delimiter=',') 
    writer.writerows(csvd) 

随着你的原码,原始输出文件实际上是这样的:

1 dd1 vi1 

2 dd2 vi2 

3 dd3 vi3 

其中在Excel中打开时,会看你在你的图像贴的方式

因此,通过将分隔符设置为,,原始文件将看起来像我上面的原始输出。并在Excel中它看起来正常(行和列,没有空格):

enter image description here

+0

似乎无法解决Excel中的格式化问题 – dvaergiller