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
': 다시
readline
를 호출 할 경우, 바이트의 총 양이 지정된 숫자보다 큰 읽을 때까지 등마찬가지로,
f.readlines(10)
전체 라인을 읽을 것, 두 번째 줄에 계속 readline (10)'은 "read line number 10"을 의미하는 것이 아니라 "line을 읽지 만 최대 10 바이트를 읽음" –고맙습니다. 나는 이것을 몰랐다! – Arda