打印python和cs

2024-09-27 21:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个生成的列表,比如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迭代器后面不起作用。让威瑟尔工作的唯一方法就是把另一个说出来。

谢谢


Tags: csvfrom服务器图层urlmap屏幕地图
2条回答

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

伪代码:

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

你有几个问题。每次循环迭代都会重新打开文件,因此每次都会截断它。您还需要在每次迭代中编写头和整个missingFromAuthoritative列表,屏蔽第一个bug。而且,每次迭代列表时,都会使用查询中的一行,所以到最后时,已经没有什么可写的了。在

您应该在循环之前打开文件一次,在循环之前写入头,在每次迭代中向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)

相关问题 更多 >

    热门问题