سؤال

تقوم الكثير من الوحدات التي أستخدمها باستيراد ملفات كاملة إلى الذاكرة أو نقل محتويات الملف أثناء معالجتها.أتساءل عما إذا كان هناك أي طريقة لتتبع هذا النوع من تقدم التحميل؟ربما فئة مجمعة تأخذ رد الاتصال؟

هل كانت مفيدة؟

المحلول

سأفعل ذلك عن طريق تحديد حجم الملف، ثم ببساطة قسمة الإجمالي على عدد البايتات المقروءة.مثله:

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