2011-05-07 6 views
5

저는 파일에서 상대적으로 큰 사전을 메모리에로드하는 작업을하고 있습니다. 사전에는 2 백만 개 항목이 있으며 각 항목 (키와 값이 결합 됨)은 20 바이트 미만입니다. 디스크에있는 파일의 크기는 38MB입니다.파이썬 사전 메모리 사용량

제 문제는 사전을로드하려고하면 프로그램이 즉시 사용 된 메모리가 2.5GB 이상으로 확장된다는 것입니다.

f = open('someFile.txt', 'r') 
rT = eval(f.read()) 
f.close() 
+0

[pickle] (http://docs.python.org/library/pickle.html)을 사용해 보셨습니까? – MattH

+0

키와 값의 유형은 무엇입니까? –

답변

7

내가 메모리가 사전 구문 AST를 구문 분석하는 데 사용됩니다 생각 : 여기

내가 디스크에서 사전을 읽기 위해 사용하는 코드입니다.

repr/eval 대신 cPickle 모듈을 사용하면 이러한 용도로 사용하면 훨씬 편리합니다.

import cPickle 

x = {} 
for i in xrange(1000000): 
    x["k%i" % i] = "v%i" % i 
cPickle.dump(x, open("data", "wb"), -1) 

x = cPickle.load(open("data", "rb")) 

-1 더 효율적하지만 오래된 파이썬 버전과 호환 가능 역 아닌 최신 프로토콜을 사용하는 방법을 덤핑. 이것이 좋은 생각인지 아닌지는 왜 덤프 /로드해야하는지에 달려 있습니다.

+0

json 모듈 –

+0

Shelve를 사용할 수도 있습니다. 그것은 부분적으로 디스크에 저장 될 수있는 거대한 사전을 위해 설계되었습니다. – Nathan

+0

고마워요! 나는 아직 이것을 구현할 기회가 없었지만, 나는 피클을 조금 읽었다. 그게 문제를 해결 해야하는 것 같습니다. – dckrooney

0

이것은 약간 주제가 다를 수 있지만 대용량 파일/데이터 스트림으로 작업 할 때 생성기 표현식을 사용하면 대단히 도움이됩니다.

This discussion explains it very wellthis presentation은 프로그램 작성 방법을 변경했습니다.