2014-03-13 4 views
-2

바이너리 검색에 대한 많은 도움이 있지만이 특정 문제를 찾을 수 없습니다. 이것이 내가 IDLE에 들어가는 것과 똑같은 일이 내 코드에서 일어나고있는 것입니다.파이썬 바이너리 검색 readline은 전체 라인을 반환하지 않습니다.

>>> import os 
>>> a=os.path.getsize("C:\\testfile.txt") 
>>> a 
9341L 

파일을 엽니 다

>>> f = open("C:\\testfile.txt",'r') 
: 먼저

, 나는 파일의 파일 크기가 (각 행은 두 개의 정수, 첫 번째 정수하여 탭으로 구분하고 분류입니다) 검색 할 찾기

파일의 중간에 탐색

>>> f.seek(int(a/2)) 
'\n' 

(이진 검색 등의 테스트를하기 전에) 라인이 있어야한다 '534\t1026\n'

즉 전체 줄이 아니라 '검색'지점부터 시작하는 줄의 나머지 부분입니다. 내가 찾은 이진 검색 코드 중 어느 것도 새로운 각각의 '찾기'에 대해 전체 라인을 얻는 방법을 말하는 것 같지 않습니다.

감사합니다,

S. 해결

, 감사 휴.

+0

죄송합니다. 투표를 취소했습니다. getsize가 반환하는 것을 찾기 위해 검색을 했습니까? os.path.getsize에 대한 Google 검색을 시도하십시오. – PyNEwbie

+0

getsize가 문제라는 것을 깨닫지 못했습니다. 문제는 readline()의 모든 정보가 전체 행을 읽는다는 것입니다. 행의 나머지 부분 만 읽지는 않습니다. Hugh의 솔루션은 간단하지만 readline()을 두 번 수행하면 간단 해 보입니다. – suze1992

답변

1

(어깨 글자) 10 문자 줄의 경우 줄의 중간에서 임의의 읽기가 시작될 확률은 90 %입니다.

일찍 10자를 읽기 시작할 것을 제안합니다 - 첫 번째 readline()은 부분 행을 가지며 두 번째 readline()은 첫 번째 전체 행을 가져옵니다.

관련 문제