문제

많은 모듈을 사용하여 전체 파일을 메모리로 가져 오거나 처리하는 동안 파일 내용물을 세면합니다. 이런 종류의 로딩 진행 상황을 추적 할 방법이 있는지 궁금합니다. 콜백을하는 래퍼 클래스 일 수 있습니까?

도움이 되었습니까?

해결책

파일의 크기를 결정한 다음 총계를 읽은 바이트 수로 나누어서이를 수행합니다. 이와 같이:

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 

편집하다: 나는 그것이 최고의 코드가 아니라는 것을 알고 있지만 개념을 보여주고 싶었습니다.

다른 팁

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

참조 꼬마 도깨비 기준 치수.

"읽기"라는 의미가 있으면 파일 같은 파일 모양의 래퍼로 파이썬 파일을 사소하게 포장 할 수 있습니다. 파일은 너무 많은 방법을 노출하지 않습니다. 흥미로운 것들을 무시하여 타이밍 데이터를 얻을 수 있습니다.

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top