拼接两个列表并输出到CSV

时间:2014-04-25 20:09:31

标签: python csv

我有两个列表,分别包含纬度和经度坐标。我希望能够以格式:

将这些列表写入csv文件
Data1, Data2, Data3, lat1, long1, lat2, long2,…,latn, longn

其中Data1,Data2,Data3是我在同一行上需要的其他数据,其后是“拼接”格式的纬度和经度。

我已经能够生成一个"拼接"使用纬度和经度串:

",".join("%s,%s" % t for t in zip(lat, long))

但是,当我将此字符串提供给csv.writer.writerow()时,当我打开csv文件时,它被csv-reading-software(Excel)解释为单个元素。

哪些代码段可以帮助我达到预期的效果?

2 个答案:

答案 0 :(得分:0)

这应该将所有坐标写在一行中。你想要的其余部分有点不清楚,可能还有更好的方法,但如果没有更多关于你的输入和理想输出的知识就无法猜测。

from itertools import chain

writer.writerows([data1, data2, data3] + list(chain.from_iterable(zip(lat, lon))) )

答案 1 :(得分:0)

你走在正确的道路上。然而,一个小细节 - 不是一直吗? writerow默认采用iterable作为参数,即列表,元组等。在这种情况下,list / iterable中的每个元素都是Excel中的单个单元格。要查看差异,请尝试以下方法:

import csv
writer = csv.writer( some_file_handle )
coordinates_iter = zip( lat, long )
# Will write lat and long as you expect
for latlong_tuple in coordinates_iter:
    writer.writerow( latlong_tuple )

如果不是列表/可迭代,而是将writerow连接的纬度和经度作为字符串提供,那么它会将信息写入单个单元格中。像这样

coordinates_str = ",".join( "%s,%s" % t for t in zip( lat, long ) )
# Will write lat and long as a string in a single cell
for latlong_str in coordinates_str:
    writer.writerow( latlong_str )
下面的@m.wasowski建议使用pythonic方式“链接”您的列表并使用writerows代替。我推荐它。但是如果你更喜欢保持嵌套循环方法,那么这样的事情可以解决问题:

for row in izip( Data1, Data2, Data3, lat1, long1, lat2, long2, … ,latn, longn ):
    writer.writerow( row )

希望它有所帮助。