2010-12-14 7 views
4

Ruby에서 거대한 텍스트 파일을 읽는 가장 효율적인 방법은 무엇입니까? 10 행 89 바이트/행. 한 방법이 다른 방법보다 훨씬 낫습니까?Ruby에서 가장 효율적인 입력 방법

+0

당신은 라인 - 라인 또는 어떻게 처리 할 말은? – tokland

+0

예, 줄 단위로 – mbm

답변

4

나는 텍스트 파일을로드하는 좋은 방법이 무엇인지 알기 위해 잠시 벤치 마크를했다. 가장 빠른 방법은 텍스트 블록 단위로 읽은 다음 String.lines를 사용하여 반복하는 것입니다.

IO.foreach(ARGV.shift) do |li| 
    print li 
end 

time ruby test.rb root.mbox > /dev/null 
# 
# real 0m3.949s 
# user 0m3.709s 
# sys  0m0.182s 

내가 타이밍에서 화면 I/O를 제거을/dev/null로 덤프 :

기준으로 188,593,869 바이트 텍스트 파일 읽기. 대신에 라인별로 독점적으로 읽는

, 다음 큰 덩어리에로드 라인을 반복 : 0.5 초 절약의

File.read(ARGV.shift).lines do |l| 
    print l 
end 

time ruby test.rb root.mbox > /dev/null 

real 0m3.492s 
user 0m3.281s 
sys  0m0.209s 

. 또한 188MB의 데이터를 빨아 들여서 더 큰 파일을 가지고 있으면 확장이 잘되지 않습니다. 좋은 점은 전체 파일을로드하기 위해 내가 말한 것인데, read()을 사용하거나 읽기 크기를 제한하도록 알려주는 것입니다.

여기에 참조 용 텍스트 파일에 대한 wc에서 청소 출력입니다 :

lines: 2,465,369 
words: 26,466,463 
bytes: 188,593,869 
+0

Windows에서'File.read'는 [매우 느립니다] (http://phrogz.net/slow-file-reads-on-windows-ruby-1.9)입니다. 바이너리 읽기 모드를 강요하기 위해서는'File.open ('foo', 'rb', & : read)'가 더 낫다. (그러나 가능한'\ r \ n '쌍을 스스로 처리해야한다. – Phrogz

관련 문제