2012-06-04 3 views
4

freebase 데이터 덤프를 사용하려하지만 파이썬으로 파일을 읽는 데 문제가 있음을 알 수 있습니다. 내 프로그램이 모든 라인을 읽을 수없는 것 같습니다. 이에파이썬에서 Freebase 데이터 덤프 읽기, 몇 줄 읽으세요?

def test2(): 
    count=0 
    for line in open(FREEBASE_TOPIC): 
     count+=1 
    return count 

def test3(): 
    count=0 
    for line in open(FREEBASE_QUAD): 
     count+=1 
    return count 


if __name__ == "__main__": 

    print "FREEBASE TOPIC - NR LINES:",test2() 
    print "FREEBASE QUAD - NR LINES:",test3() 

결과 :

FREEBASE TOPIC - ITR TIME: 1.21000003815 
FREEBASE TOPIC - NR LINES: 1643010 

FREEBASE QUAD - ITER TIME: 0.797000169754 
FREEBASE QUAD - NR LINES: 3155131 

이 모든 것을 할 수 있습니다. 전체 프리 스탠드를 포함하는 것은 몇 줄로 보입니다. 그리고 1 초에 33GB 파일과 5GB 파일을 반복하는 방법을 알 수 없습니다.

무엇이 잘못 되었나요? 다운로드 과정에서 문제가 생길 경우를 대비하여 파일을 다시 다운로드하지만 연결로 인해 수십 년이 걸리므로 잠시 동안 묻습니다. 파일 크기가 정확하고 일부 줄이 인쇄되어 올바르게 보입니다.

open('file', 'rb') 

가 그것을 해결해야

+1

''wc -l yourfile''이 뭐라고 말합니까? – jterrace

답변

2

나에게 발생한 문제가 있습니다.

chr(26) 

은 텍스트 모드 'r'이 기본값 인 파일을 종료시키는 경우가 있습니다.

+0

open ('file') 대신 open ('file', 'rb')이 작동했습니다! codecs.open ('file', 'r', 'utf-8')도 작동하지만, 유니 코드 문자 중 일부가 tsv 파일의 새 줄을 알리는 신호이기 때문에 존재하는 것보다 많은 줄을 생성합니다. – kimg85

2

는 소리가 난다. 거의 확실하게 파일을 압축 된 상태로 유지하고 액세스 할 때 압축 해제하는 것이 좋습니다.

from bz2 import BZ2File 
for line in BZ2File('freebase-datadump-quadruples-<date>.tsv.bz2','rU'): 
    <process a line>