所以我有一个生成的列表,比如missingfromauthoritative,有了这个列表,我想做两件事。 1在屏幕上打印结果; 2将结果写入csv文件。
以我所拥有的,它会做一个或另一个,有时是一个组合。下面的代码就是我的代码。
#Find what is missing or new
missingFromAuthoritative = dBase.execute('SELECT url, mapindex, mapname, layerid, layername FROM authoritative EXCEPT SELECT url, mapindex, mapname, layerid, layername FROM current;')
newToAuthoritative = dBase.execute('SELECT url, mapindex, mapname, layerid, layername FROM current EXCEPT SELECT url, mapindex, mapname, layerid, layername FROM authoritative;')
#Print missing services (-) and new services (+)
for missing in missingFromAuthoritative:
print '-', missing[0], '\n Map: ', missing[2], '\n Layer:', missing[4], '\n'
self.inconsistency += 1
outcsv = csv.writer(open('missing.csv', "wb"))
header = ("Map Service","Map Index","Data Frame","Layer ID","Layer Name")
outcsv.writerow(header)
outcsv.writerows(missingFromAuthoritative)
它有时也会将一行写入屏幕,另三行写入csv。 这就是我想在屏幕上看到的 -地图服务器 贴图:图层 层:拟建发电站 -地图服务器 贴图:图层 层:现有基础设施 -地图服务器 贴图:图层 图层:现有公用设施场地 -地图服务器 贴图:图层 层:现有输电线路 在81.28秒内发现4个不一致。
这就是我想要的csv 地图服务地图索引数据帧图层ID图层名称 MapServer 0层0拟建发电站点 MapServer 0层1现有基础结构 Map2实用工具站点现有层 MapServer 0层3现有传输线
我不知道为什么把它们放在for迭代器后面不起作用。让威瑟尔工作的唯一方法就是把另一个说出来。
谢谢
你的写作正在消耗迭代器。你需要重新构建你的代码。在
伪代码:
你有几个问题。每次循环迭代都会重新打开文件,因此每次都会截断它。您还需要在每次迭代中编写头和整个
missingFromAuthoritative
列表,屏蔽第一个bug。而且,每次迭代列表时,都会使用查询中的一行,所以到最后时,已经没有什么可写的了。在您应该在循环之前打开文件一次,在循环之前写入头,在每次迭代中向csv写入一行,然后关闭文件。您可以使用
with
块执行此操作:相关问题 更多 >
编程相关推荐