0

所以我有一个生成的列表,例如missingfromauthoratative,我想做两件事。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。这就是我想要在屏幕上显示的内容 - MapServer 地图:图层图层:提议的发电站点 - MapServer 地图:图层图层:现有基础设施 - MapServer 地图:图层图层:现有公用设施站点 - MapServer 地图:图层图层:现有传输线 4 不一致在 81.28 秒内找到。

这就是我在 csv 地图服务地图索引数据框图层 ID 图层名称中想要的 MapServer 0 图层 0 拟议发电站点 MapServer 0 图层 1 现有基础设施 MapServer 0 图层 2 现有公用设施站点 MapServer 0 图层 3 现有传输线

我不知道为什么将它们放在 for 迭代器之后不起作用。让凋灵开始工作的唯一方法是评论对方。

谢谢

4

2 回答 2

1

你有几个问题。您在每次循环迭代时都重新打开文件,因此每次都将其截断。您还在missingFromAuthoritative每次迭代中编写标题和整个列表,掩盖第一个错误。此外,每次遍历列表时,都会消耗查询中的一行,所以当你到达末尾时,就没有什么可写的了。

您应该在循环之前打开文件一次,在循环之前写入标题,在每次迭代时将一行写入 csv,然后关闭文件。你可以用一个with块来做到这一点:

with open('missing.csv', "wb") as outFile:
    outCsv = csv.writer(outFile)
    outCsv.write(header)
    for missing in missingFromAuthoritative:
        # do your other stuff with inconsistencies, etc., here
        print missing
        outCsv.writerow(missing)
于 2012-08-21T20:22:14.670 回答
0

您的写作正在消耗迭代器。您需要重新架构您的代码。

伪代码:

Perform query
Open CSV file
Write header to CSV file
For each row in the query:
  Display row to screen
  Write row to CSV file
Close CSV file
于 2012-08-21T20:18:24.823 回答