2012-08-21 6 views
0

그래서 목록이 생성됩니다. 그 목록에서 나는 두 가지 일을하고 싶다. 1. 결과를 화면에 인쇄하십시오. 2. 결과를 csv 파일에 씁니다.인쇄 파이썬 및 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 지도 : 레이어 레이어 : 기존 전송 라인 4 개의 불일치가 81.28 초 내에 발견되었습니다.

이 내가 CSV에서 원하는 것입니다 지도 서비스 맵 색인 데이터 프레임 레이어의 ID 계층 이름 맵 서버 0 레이어 0 제안 된 발전 사이트 맵 서버 0 레이어 1 기존 인프라 맵 서버 0 레이어 2 개 기존 유틸리티 사이트 MapServer 0 레이어 3 기존 전송 라인

for iterator가 작동하지 않는 이유는 알 수 없습니다. 쇠퇴하게하는 유일한 방법은 다른 것을 주석으로 처리하는 것입니다.

감사합니다.

답변

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) 
+0

감사합니다. 나는 그것을 얻을 수없는 것과 같아야한다고 생각하고있었습니다. 또한 구문 오류를 막기 위해 <__future__ import from open>을 시작 부분에 넣어야했습니다. – user1614303

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