2016-10-17 2 views
4

나는 5gb의 텍스트 파일을 가지고 있으며 그것을 한 줄씩 읽으려고합니다. 내 파일 포맷팅 및에 있습니다 Reviewerid < \ t> PID < \ t> 날짜 < \ t> 제목 < \ t> 몸 < \ n> 이 내 코드왜 메모리 오류가 발생합니까? Python

o = open('mproducts.txt','w') 
with open('reviewsNew.txt','rb') as f1: 
    for line in f1: 
     line = line.strip() 
     line2 = line.split('\t') 
     o.write(str(line)) 
     o.write("\n") 

입니다하지만 난 메모리 오류 내가 그것을 실행하려고 할 때. 나는 8GB의 램과 1TB의 공간을 가지고 있는데 왜이 에러가 발생합니까? 나는 그것을 블록으로 읽으려고했으나 그때 나는 그 오류를 얻는다.

MemoryError 
+3

이 얼마나 그 파일에서 가장 긴 라인? –

+0

@FranciscoCouzo 나는 모른다. EmEditor에서 그 파일을 열려고하면 "매우 큰 몇 줄이 포함되어 있습니다. 이진 형식으로 열시겠습니까?"라는 창이 나타납니다. 이진 옵션을 선택하면 파일이 올바르게 표시됩니다. –

+1

'o.write()'에서'o'는 무엇입니까? 당신이 기억하는 모든 것을 지키고 있다면, 나는 당신이 기억 상실을 겪고 있다는 것에 놀라지 않을 것입니다. – Akavall

답변

3

업데이트 :

64 비트 파이썬 설치 문제를 해결합니다.

OP는 32 비트 Python을 사용했기 때문에 메모리 제한이 적용됩니다.


전체 의견보기 나는 이것이 당신을 도울 수 있다고 생각합니다.

  • 데이터를 처리하기 때문에 청크 파일을 1024로 읽을 수 없습니다.
  • 대신 한 줄씩, 즉 한 번에 N 줄씩 파일을 읽으십시오.
  • 위의 내용을 달성하기 위해 Python에서 yield 키워드와 itertools을 사용할 수 있습니다.

요약 : 과정을, 시간에 N 라인을 취득 후 물품.

샘플 코드 :

from itertools import islice 
#You can change num_of_lines 
def get_lines(file_handle,num_of_lines = 10): 
    while True: 
     next_n_lines = list(islice(file_handle, num_of_lines)) 
     if not next_n_lines: 
      break 
     yield next_n_lines 


o = open('mproducts.txt','w') 

with open('reviewsNew.txt','r') as f1: 
    for data_lines in get_lines(f1): 
     for line in data_lines: 
      line = line.strip() 
      line2 = line.split('\t') 
      o.write(str(line)) 
      o.write("\n") 
o.close() 
+0

하지만 줄 단위로 읽었습니다. 나는 아무것도 기억하고 있지 않았습니다. 한 줄을 읽고 다른 파일에 썼습니다. 또한 내 최대 라인 길이는 약 9000입니다. 길이 문제가 있습니까? –

+0

줄 길이 문제로 생각하지 않습니다. 방금 길이 10000으로 시도했습니다. 그것은 잘 작동합니다. 내 코드가 도움이 되었습니까? –

+0

또한 Windows 또는 Linux를 사용하고 있다면 알려주시겠습니까? –