2016-12-30 11 views
5

Mam obecnie kod, który wyszukuje pliki według słów kluczowych. Czy istnieje sposób, aby pokazać liczbę znalezionych plików, jak działa kod i lub pokazać postęp? Mam duży katalog do wyszukania i chciałbym zobaczyć postęp, jeśli to możliwe. Kod, który mam obecnie, nie pokazuje zbyt wiele informacji ani czasu przetwarzania.Wyświetlana liczba znalezionych plików i postęp

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

możesz równie dobrze zrobić 'sys.stdout.write ('.')' Zamiast 'print '\ b.',' Aby nie zakończyć drukowania przestrzeni na pierwszym miejscu – 2rs2ts

Odpowiedz

0

To bardzo proste, ale dlaczego nie po prostu zachować licznik?

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) 

Edit: jeśli chcesz obliczyć postęp należy najpierw dowiedzieć się, ile plików będziesz iteracji skończona. Jeśli używasz zagnieżdżonej listy, możesz spłaszczyć każdy z files z każdego potrójnego sygnału emitowanego przez os.walk.

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

Teraz na każdym etapie można opisać postęp jako bieżący numer kroku podzielony przez liczbę plików. Innymi słowy, za pomocą enumerate aby uzyskać numer kroku:

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() 

Jeśli chcesz uzyskać bardziej twórczy w jaki sposób wydrukować postęp, to inna kwestia.

+0

Czy istnieje sposób pokazać procent ukończenia? –

+0

To trochę bardziej zabawne pytanie, ale mogę na to odpowiedzieć, daj mi chwilkę. – 2rs2ts