2014-02-28 3 views
1

islice를 사용하여 텍스트 파일의 줄을 여러 번 읽으 려합니다. 목표는 매번 목록에 포함 된 색인을 포함하는 행을 얻고 나중에이 행만 포함하는 파일을 작성하는 것입니다. 나는 다음 스크립트를 시도했지만 행 번호를 인쇄하여 프로그램이 for 루프에도 불구하고 한 번만 파일을 읽음을 깨달았다. 왜?islice를 사용하여 텍스트 파일을 반복합니다.

with open(input,'r') as inp,: 
    sliced_file = islice(inp,None) 

for ind in listOfInd:  
    print('ind ' + ind) 
    for line_number, line in enumerate(sliced_file,start=1): 
     print(line_number) 
     number, rest = line.split('\t',1) 

답변

1

enumerate 함수 sliced_file 반복자 객체에서 호출 처음 파일의 끝에 도달한다. 다음에 파일을 다시 반복 할 때 파일 포인터를 파일의 시작 부분으로 재설정해야합니다.

또한 스 니펫에서 흐름 제어가 with 블록 밖으로 이동하면 파일이 닫히고 읽을 수 없습니다.

여기에 고정 코드가 있습니다.

inp = open(input,'r') 
sliced_file = islice(inp,None) 
for ind in listOfInd:  
    print('ind ' + ind) 
    for line_number, line in enumerate(sliced_file,start=1): 
     print(line_number) 
     number, rest = line.split('\t',1) 
    inp.seek(0) 
관련 문제