我有两个列表,分别包含纬度和经度坐标。我希望能够以格式:
将这些列表写入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)解释为单个元素。
哪些代码段可以帮助我达到预期的效果?
答案 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 )
希望它有所帮助。