2009-01-22 10 views
3

많은 모듈을 사용하여 전체 파일을 메모리로 가져 오거나 파일의 내용을 처리하는 동안 흐리게 만듭니다. 이런 종류의로드 진행 상황을 추적 할 방법이 있는지 궁금합니다. 아마도 콜백을 사용하는 래퍼 클래스일까요?파이썬에서 파일 로딩 진행 추적하기

답변

7

파일 크기를 결정한 다음 총계를 읽은 바이트 수로 나누면됩니다. 이처럼 :

import os 

def show_progress(file_name, chunk_size=1024): 
    fh = open(file_name, "r") 
    total_size = os.path.getsize(file_name) 
    total_read = 0 
    while True: 
     chunk = fh.read(chunk_size) 
     if not chunk: 
      fh.close() 
      break 
     total_read += len(chunk) 
     print "Progress: %s percent" % (total_read/total_size) 
     yield chunk 

for chunk in show_progress("my_file.txt"): 
    # Process the chunk 
    pass 

편집 : 나는 그것이 최선의 코드가 아닙니다 알아,하지만 난 그냥 개념을 보여주고 싶었다.

2

실제로 "가져 오기"("읽지 않음")를 의미하는 경우 가져 오기 모듈 정의를 무시할 수 있습니다. 타이밍 기능을 추가 할 수 있습니다.

imp 모듈을 참조하십시오.

"읽기"를 의미하는 경우, 파이썬 파일을 파일과 비슷한 래퍼로 쉽게 래핑 할 수 있습니다. 파일은 너무 많은 메소드를 노출하지 않습니다. 타이밍 데이터를 얻기 위해 흥미로운 것을 무시할 수 있습니다.

>>> class MyFile(file): 
...  def read(self,*args,**kw): 
...   # start timing 
...   result= super(MyFile,self).read(*args,**kw) 
...   # finish timing 
...   return result