我遇到了以我想要的方式编写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的每个元素都在不同的列中)。 第二个问题是我在nexts touples之间有一条空行。
我试图用writerow
和for loop
来解决我的问题,但这只是我第二个问题的解决方案,使用这种方法我仍然在第一列中得到了所有的解决方案。
答案 0 :(得分:5)
不确定空白行,但可能是因为行终止符。明确将其设置为' \ n'可以帮忙。
关于Excel中的列问题:Excel使用&#39 ;;'默认为列分隔符。这可以在Excel中更改,但您也可以更改要用于列分隔符的字符。
此编写器调用将更改行终止符和列分隔符:
writer = csv.writer(f, delimiter=';', lineterminator='\n')
看看是否有帮助。
答案 1 :(得分:0)
试试这个:
with open('path\\test.csv', 'wb') as f:
答案 2 :(得分: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
编辑:
无法相信我没有注意到这一点,但是你的whitespacing是因为你已经将作者设置为制表符分隔符。只需将原始代码更改为:
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中,它看起来很正常(行和列,没有空格):