2017-12-16 2 views
1

5GB 파일의 내용을 읽고 정렬하여 중복을 찾으려고합니다. 파일은 기본적으로 숫자의 목록입니다 (각각 새로운 행에 있음). 빈 줄이나 숫자 이외의 기호는 없습니다. 숫자는 모두 꽤 큽니다 (최소 6 자리). 현재 사용 중입니다. 메모리 문제를 피하기 위해Python readline() 및 readlines()가 작동하지 않습니다.

for line in f: 
    do something to line 

을 사용하고 있습니다. 나는 그것을 사용하는 것이 좋다. 그러나, 나는 왜 readline()과 readlines()가 나에게 도움이되지 않는지에 관심이있다. 내가

print f.readline(10) 

을하려고하면 프로그램이없이 항상 내가 매개 변수로 사용하는 번호 같은 줄을 반환하지 않습니다. 정확히 말하면, 파일의 첫 번째 줄이 큰 수인데도 readline (0)을 수행하면 빈 줄이 반환됩니다. readline (1)을 시도하면 숫자 2가 파일에 없더라도 2를 반환합니다. 매개 변수가> = 6이면 항상 동일한 숫자가 반환됩니다. 291965

또한 readlines() 메서드는 매개 변수와 관계없이 항상 같은 줄을 반환합니다. f.readlines (2)를 인쇄하려고해도 여전히 1000 개가 넘는 번호 목록을 제공합니다.

나는 아주 잘 설명했는지 확신 할 수 없다. 죄송합니다. 영어가 제 첫 번째 언어가 아닙니다. 어쨌든, 나는 readline 메소드 없이는 작동하도록 만들 수 있지만, 실제로 예상대로 작동하지 않는 이유를 알고 싶다.

이것은 파일의 처음 10 개 라인이 어떻게 생겼는지입니다 : 내가 f.readline(1)는 "수천 줄의"반환 2, 또는 f.readlines(10)를 반환 재현 할 수없는

548098 
968516 
853181 
485102 
69638 
689242 
319040 
610615 
936181 
486052 
+2

': 다시 readline를 호출 할 경우, 바이트의 양이 지정된 숫자보다 큰 읽을 때까지 등

마찬가지로, f.readlines(10) 전체 라인을 읽을 것, 두 번째 줄에 계속 readline (10)'은 "read line number 10"을 의미하는 것이 아니라 "line을 읽지 만 최대 10 바이트를 읽음" –

+0

고맙습니다. 나는 이것을 몰랐다! – Arda

답변

0

,하지만 당신은 어떤 정수 오해처럼 보인다 이러한 함수에 대한 매개 변수는 않습니다.

숫자는 이 아니며은 읽을 줄 번호를 지정하지만 최대 바이트 수는 readline입니다.

>>> f = open("data.txt") 
>>> f.readline(1) 
'5' 
>>>f.readline(100) 
'48098\n' 

두 명령 모두 첫 번째 줄 (548098)에서 읽습니다. 첫 번째 명령은 1 바이트 만 읽습니다. 두 번째 명령은 나머지 행을 읽습니다. 100 바이트 미만이 남아 있기 때문입니다.

>>> f.readlines(10) 
['968516\n', '853181\n'] 
관련 문제