2012-02-22 3 views
1

개인적인 용도로 코드를 작성하는 동안 이상한 문제가 발생했습니다. 내 코드가 말하기를 할 수있게 해준다.두 번째 패스 중에 개체와 상호 작용할 수 없습니다.

이것은 분명히 코드의 일부일 뿐이다. 내가 겪고있는 문제는 을 통해 루프를 시도하는 handleSave에 있습니다. 루프를 입력하는 것처럼 보이지 않습니까? 나는 무슨 일이 일어나고 있는지 정말로 확신하지 못한다. getValues의 루프가 예상대로 작동합니다.

누군가 무슨 일이 일어 났는지 설명 할 수 있습니까? 나는 무엇을 잘못 했는가? 이 문제를 해결하려면 어떻게해야합니까?

답변

3

일단 반복기를 반복하면 한 번 반복 할 수 없습니다.

rows = list(reader) 

: 또는

f = open(self.filename) 
reader = csv.reader(f, delimiter = ',', quotechar = '"') 

assetName, efficiencyRating = self.getValues(reader) 

f.seek(0) # rewind file 
reader = csv.reader(f, delimiter = ',', quotechar = '"') 

self.handleSave(assetName, reader) 

당신이 목록에 데이터를 읽을 수 있습니다 : 당신이 handleSave를 호출하여 파일을 뒤로하고 새로운 독자를 만들기 전에이 문제를 해결 할 수

한 가지 방법이다 그런 다음 reader 대신 rows을 반복합니다.

사이드 노트에서 파이썬의 규칙은 이름을 낙타의 경우가 아니라 밑줄로 구분하여 소문자로 표기하는 것입니다. (예를 들어, get_values보다는 getValues, handle_save 오히려 handleSave 이상) CSV 모듈의

+0

감사합니다. 나는'csv.reader'가 반복자를 반환했다는 것을 깨닫지 못했습니다. 나는 그것이 목록이라고 생각했다. 더 많은 연구를하지 않는 것에 대한 나의 잘못. :( – Rico

0

독자의 방법은 순서에 작용하고 당신이 당신에 getValues ​​방법에 한 번 이상 반복대로, 순서는 이미 비우면된다. 불행히도 시퀀스를 다시 전달하는 것보다 더 좋은 방법은 없습니다.

은 당신의 방법에 csv.reader를 이동하고

open(self.filename), delimiter = ',', quotechar = '\"') 

을 보내거나 파일 객체마다를 만들거나 (0) 재설정 추구에 의해 처리됩니다 개체에 대한 인수로 그를 보내

독자 방법. 도움이 될 것입니다.

관련 문제