2013-08-01 2 views
0

저는 python을 처음 사용합니다.python에서 항목을 얻는 방법 enumerate()

두 개의 파일이 있습니다. 하나는 기호 (단어)를 포함하고 다른 하나는지도 파일입니다.

두 파일 모두 텍스트 파일입니다. 지도 파일에는 양식 피드가 포함되어 있습니다.

심볼을 맵 파일에 포함하는 행 위의 맵 파일에서 행을 찾고 싶습니다.

다음 코드가 있습니다.

Osymbolfile="alistofsymbols" 
mapfile="amapfile" 
maplines = (line.rstrip('\n\f') for line in open(mapfile)) 
for line in Osymbolfile: 
    line = (line.rstrip('\n')) 
    print "line= ",line 
    linecount = 0 
    for index, scanline in enumerate(maplines): 
     if line in scanline: 
      print "scanline=",scanline 
      print "index=",index 
     else: 
      linecount = linecount + 1 
    print "= ",linecount 

print "index=",index 후, 나는 print maplines[index-1]을 시도했지만, 오류가 발생합니다.

'줄 위의 줄은 maplines에서 어떻게 얻을 수 있습니까?

+2

그냥 "나는 오류가"말하지 말라 :

그러나 사건을 처리하는 적절한 방법은 이전 행 만 저장하는 것입니다. 추적을 사용하여 오류를 표시하십시오. 일반적으로 잘못된 점을 정확히 알려줍니다. 이해할 수 없더라도 도움을 주려고하는 사람들이 당신에게 설명 할 수 있습니다. – abarnert

답변

2

maplines 개체는 생성자 식입니다. 이들은 요구에 따라 아이템을 생산하며, 인덱싱 할 수 없습니다.

는 대신 지능형리스트를 사용할 수 있습니다

maplines = [line.rstrip('\n\f') for line in open(mapfile)] 

지금 당신이 대신 색인 목록 개체가 있습니다. 더 좋은 점은이 객체를 여러 번 반복 할 수 있다는 것입니다. 당신은 발전기로 그것을 할 수 없습니다.

with open(mapfile) as maplines: 
    prev = None 
    for line in maplines: 
     if something in line: 
      return prev 
     prev = line 
+0

+1은 이전 행을 저장합니다. 이것에 대한 좀 더 일반적인 해결책은'collections.deque'로 할 수 있습니다. 여러분은'maxlen' 인자를 지정할 수 있습니다. 'deque'는 마지막'n' 아이템까지 저장하고, 새로운 아이템을 추가 할 때 가장 오래된 아이템을 자동으로 삭제합니다. 그런 다음'prev [-x]'를 사용하여'x' 번째 항목을 되 찾을 수 있습니다. – kindall

관련 문제