2016-12-30 14 views
5

Şu anda dosyaları anahtar sözcüğe göre arayan bir kod var. Kod çalıştığı ve ilerlemeyi gösterdiği için bulunan dosya sayısını göstermenin bir yolu var mı? Aramak için büyük bir dizinim var ve eğer mümkünse ilerlemeyi görmek istiyorum. Şu anda sahip olduğum kod, fazla bilgi veya işlem süresi göstermiyor.Bulunan dosya sayısı ve ilerleme durumu

import os 
import shutil 
import time 
import sys 

def update_progress_bar(): 
    print '\b.', 
    sys.stdout.flush() 

print 'Starting ', 
sys.stdout.flush() 

path = '//server/users/' 
keyword = 'monthly report' 

for root, dirs, files in os.walk(path): 
    for name in files: 
    if keyword in name.lower(): 
     time.sleep(0) 
     update_progress_bar() 

print ' Done!' 
+0

'print '\ b' yerine' sys.stdout.write ('.') 'Yazabilirsiniz, bu yüzden ilk etapta alanı yazdırmaya son vermeyin – 2rs2ts

cevap

0

Bu oldukça basit, ancak neden sadece bir sayaç tutmuyorsunuz?

files_found = 0 
for root, dirs, files in os.walk(path): 
    for name in files: 
    if keyword in name.lower(): 
     files_found += 1 
     time.sleep(0) 
     update_progress_bar() 

print "Found {}".format(files_found) 

Düzenleme: Eğer yineleme olacak kaç dosya öncelikle anlamaya gerektiğini ilerleme hesaplamak istiyorum. İç içe geçmiş bir liste anlaşması kullanırsanız, tarafından yayınlanan her üçlüden files her birini düzleştirebilirsiniz.

filenames = [name for file in [files for _, _, files in os.walk(path)]] 
num_files = float(len(filenames)) 

Şimdi her adımda dosyaların sayısına bölünmesiyle Mevcut adım numarası olarak ilerlemeyi tanımlayabiliriz. Başka bir deyişle, adım numarası almak için enumerate kullanarak:

files_found = 0 
for step, name in enumerate(filenames): 
    progress = step/num_files 
    print "{}% complete".format(progress * 100) 
    if keyword in name.lower(): 
     files_found += 1 
     time.sleep(0) 
     update_progress_bar() 

Eğer farklı bir soru ilerleme yazdırmak nasıl daha yaratıcı olmak istiyorum.

+0

Bir yolu var mı tamamlanma yüzdesini göstermek için? –

+0

Bu bir sorunun biraz etçisi ama buna cevap verebilirim, bana bir saniye ver. – 2rs2ts

İlgili konular