2015-01-13 3 views
0

큰 파일이 있고 for 루프에서 끝나는 줄에서 시작하고 싶습니다.CSV 파일에서 특정 한 줄 시작

def ip_to_land(whatIP, startline): 

    with open("cord.csv") as csvfile: 
    # 100640 total lines 
    readCSV = csv.reader(csvfile, delimiter = ",") 

    for row in readCSV: 
     IP_LOW = IPAddress(row[0]) 
     IP_HIGH = IPAddress(row[1]) 
     Land = row[2] 

     start_line += 1 

     if IPAddress(whatIP)>=IP_LOW and IPAddress(whatIP)<=IP_HIGH: 
      return Land, row[3], row[4], start_line 
      readCSV.seek(start_line) 
      break 

이것은 가능합니까?

답변

2

파일이 읽기 오픈 readCSV입니다 가정,하지 (시크 아닌)을 csv.reader, 당신은 오프셋 바이트하지 오프셋 라인을 추구합니다.

그래서,

start_line = readCSV.tell() 

나중에 다시 같은 자리에 추구 할 수 있도록 예컨대 사용합니다.

파일의 tell 메서드는 읽으려는 바이트 단위의 오프셋을 반환합니다. https://docs.python.org/2.4/lib/bltin-file-objects.html의 문서 에서처럼 Windows를 사용하는 경우 rb (이진 읽기) 파일을 열고 tellseek이 제대로 작동하는지 확인해야 할 수 있습니다 (그렇지 않으면 줄 끝 변환이 중단 될 수 있음). 적절한 작동).

+0

실제 코드를 맨 위에 추가했습니다. 아직도 가능합니까? –

+0

들여 쓰기 문제로 말하기가 어렵습니다. 탭이 아닌 4 칸 들여 쓰기하여 Q를 편집하십시오. 정확히 어디에서'찾기'와'휴식', ** ** 이유는 지금 꽤 신비 스럽습니다. 일반적으로 가능하지만, 바이트 단위의 오프셋 (여전히 탐색 할 수있는 위치)과 현재 행 번호 (탐색에 유용하지 않음)가 다른 목적으로 필요하면 별도로 관리해야합니다. –

0

도움이 될 수 있습니다. 나는 readCSV가 파일의 모든 라인의리스트라고 가정하고있다. 당신은 루프를 종료 할 때

readCSV= open('filename.CSV').readlines() #list of all the lines in file 

    for row in range(len(readCSV)): 

     if something: 
      #your code 
      break 

    print readCSV[row+1] 

row가 된 경우는 print 호출이 라인의 목록에서 다음 라인을 인쇄 할 33 말한다.

관련 문제