2017-11-27 2 views
-1
with open('test.csv') as f: 
    reader = csv.reader(f, skipinitialspace=True, delimiter = ';') 
    header = next(reader) 
    a = [dict(zip(header, row)) for row in reader] 

기본적으로 사전의 목록에 CSV에서 이동합니다 하나는 오류가 있습니다. 나는 회사에 상당히 익숙하지 않고 n00b처럼 보이기를 원하지 않으므로 32 비트 주소로 실행하면서이 작업을 수행하는 방법이 있습니까?메모리 오류 내 500메가바이트을 위해 내가 그러나 그것은 작은 CSV 파일을 위해 노력하고 사전의 목록에 csv로 변환하고 위의 코드와 함께,

P.S : 나는 csv.DictReader을 시도하고는 5백메가바이트의 CSV 메모리에 공간을 많이 걸릴 것입니다

Traceback (most recent call last): 
    File "<input>", line 3, in <module> 
    File "c:\python27\Lib\csv.py", line 116, in next 
    d = dict(zip(self.fieldnames, row)) 
MemoryError 
+0

가 오류를 게시 할 수 있습니다하려고 이곳에서만 솔루션을 사용하여 당신은 또한 메모리에로드 할 수 없습니다

을 필요로하는 부분을로드? – TinyTheBrontosaurus

+0

예 –

+0

시스템에 얼마만큼의 RAM이 있습니까? – TinyTheBrontosaurus

답변

0

작동하지 않았다. 더 작은 파일을로드 한 다음 파일 크기와 메모리의 차이를 비교하여 파이썬에서 오버 헤드에 대한 아이디어를 얻습니다.

그런데 문제는 프로그램이 목록 이해를 통해 전체 파일을 메모리에로드한다는 것입니다. Read random lines from huge CSV file in Python

+0

그게 전부가 필요합니다 .... –

+0

in memory? 그럴리가. 이 데이터를 소비하는 함수가 무엇이든 더 똑똑하게 만들어야합니다. – TinyTheBrontosaurus

+0

@ J.Doe : 그렇다면 64 비트 Python을 사용하십시오. RAM의 보트로드를 사용할 수 있다는 것은 x86-64와 같은 64 비트 아키텍처의 주요 기능 중 하나입니다. 효율적인 프로그램을 작성하는 대신 RAM을 사용하면 옵션이됩니다. 32 비트 x86 코드는 기본적으로 많은 RAM에 액세스 할 필요가 없을 때 메모리를 절약하는 데 유용합니다. (32 비트 포인터 = 포인터가 많은 데이터 구조의 경우 메모리 소비가 적음). –

관련 문제