2012-03-15 4 views
0

저는 Python을 처음 사용하고 있으며이를 사용하여 CSV 파일의 데이터를 구문 분석하고 조작하려고합니다. 아래 스크립트에는 실행되지 않는 코드 부분이 있습니다. 그러나 파이썬 구문에 대해 아주 근본적인 것을 오해하고있는 것이 아니라면 꼭 그래야한다고 생각합니다. 코드의 주석을보십시오. 주석을 사용하여 코드가 실행되지 않는다고 표시했습니다. 누군가 문제가 무엇인지 말해 줄 수 있습니까? 당신이 uniqueify(f)를 호출 한 후이 Python 코드의 일부가 실행되지 않는 이유

f.seek(0) 

를 추가

import csv 
import datetime 

def uniqueify(file): 
    checked = [] 
    reader = csv.reader(file) 
    for row in reader: 
     if row[1] not in checked: 
      checked.append(row[1]) 
    return checked 


f = open('d:/test.csv') 
reader = csv.reader(f) 
print "Parsed file is:", f.name 

offers = uniqueify(f) 

print "Offers", "|", 
print "Channel", "|", 

start = datetime.date(2011, 12, 01) 
end = datetime.date(2012, 01, 31) 
d = start 
while (d<=end): 
    print d, "|", 
    d += datetime.timedelta(days=1) 
print #force to new line 

for o in offers: 
    print o,"|", "DRTV","|" 
    for row in reader: 
#NOTHING INSIDE THIS FOR LOOP EXECUTES 
     print row 
     if row[1] == o: 
      print "foo" 
      date = datetime.date(row[0]) 
      padding = date - start 
      print padding 

#NOTHNG BELOW THIS LINE EXECUTES 
for row in reader: 
    print row 
    print "foo" 
+0

입력 파일의 내용을 볼 수 있습니까? 실제로 유효한 CSV가 아니므로 읽을 것이 없습니다. – jtbandes

+0

민감한 데이터가 포함되어 있기 때문에 불행히도 없습니다. 그러나 CSV를 성공적으로 구문 분석하고 코드의 다른 부분에 내용을 인쇄하므로 CSV에 아무 문제가 없다고 생각됩니다. 예를 들어 my uniqueify 함수가 실행되고 offer 변수가 화면에 잘 인쇄됩니다. – hughesdan

+0

스크럽 된 대표 샘플을 제공하십시오. 또한, 당신의 인쇄 진술은 이상하게 보입니다. 단일 리터럴 대신 암시 적으로 문자열 리터럴을 연결하는 이유가 있습니까? 또한 메시지 정확성을 위해 "파싱 된 파일 :"은 "지금 파싱"되어야합니다. –

답변

4

보십시오. CSV 판독기를 지원하는 파일 객체가 고갈되고있는 것 같습니다.

+0

예. 하지만 그 이유를 이해하고 싶습니다. "파일 객체를 다 써 버리는 것"이 ​​무슨 뜻인지 자세히 설명해 주시겠습니까? – hughesdan

+0

예. 파일 내용을 다시 보려고하는 대신 이미 파싱 된 내용을 가지고 있습니다. 쿠폰을 반복하면됩니다. –

+2

@hughesdan 파일 객체는 커서가있는 반복자이므로 커서를 뒤로 이동하지 않고 두 번 반복 할 수 없습니다. 한 줄을 읽은 후에는 다시 읽을 수 없으며, 전체 파일을 읽은 후에 다시 읽으려면 시작 부분으로 커서를 가져 가야합니다. 또는 이미 읽은 데이터를 다시 처리하십시오. –

관련 문제