2014-12-18 1 views
1

메모리 오류 문제가 있습니다.Python readline() 및 Counter가 매우 긴 행의 MemoryError를 발생시킵니다.

pifile = 'pibillion.txt' 
with open(pifile, "r+") as a: 
    data = str(a.readline()) 
    c = Counter(data) 

내 코드는 pi의 숫자 중 하나의 매우 큰 행을 읽습니다. txt 파일은 953MB에 불과합니다. 8GB RAM이 있습니다. 나는 그것이 문자열 크기 제한으로 실행된다는 오류를 추측하고 있지만 확실하지 않습니다. 나머지 코드는 줄 바꿈을 2 씩 증가시킵니다. 어떤 도움이라도이 작업을 계속하는 방법에 대해 크게 감사 할 것입니다.

내가지고있어 정확한 오류

은 이것이다 :

data = str(a.readline()) 
    MemoryError 
+1

제공되는 특정 오류를 공유 할 수 있습니까? – Malonge

+1

10 억 자릿수의 숫자는 대부분의 언어에서 기본 구현에있어 상당히 어려운 문제입니다. 솔루션의 문제가 아니라 해결하려는 문제에 대해 더 잘 질문하십시오. –

+2

반복적으로, 파이썬은 게으르지 않다. – simonzack

답변

2

파이썬 그래서 문자열을 읽는 것은 메모리에 모든 것을 넣어 것, (하스켈 같은) 본질적으로 게으른 없습니다. 일부 문자열 변환을 추가하면 메모리가 부족합니다. 대신 다음과 같이 반복적으로 수행하십시오.

파일은 대개 연속적으로 저장되므로 삽입하는 데 많은 비용이 소요되므로 새 파일을 사용했습니다.

with open('pibillion.txt', 'r') as old_file, open('pibillion_.txt', 'w') as new_file: 
    while True: 
     c = old_file.read(2) 
     if not c: 
      break 
     new_file.write(c + '\n') 
+0

BTW, 저는 답을 올렸습니다.하지만 "파이썬은 게으르지 않습니다"라고 말하지는 않습니다. 예를 들어 생성자와 생성자 표현을 사용하여 파이썬에서 많은 게으른 평가가 있기 때문입니다. –

+0

@PauloScardine 감사합니다. 나는 우리 뒤에 그다지 친절하지 않은 의견을 넣을 수 있기를 바랍니다. – simonzack

+0

사과도 수락하십시오. :-) –