2016-07-19 7 views
0

Ich schrieb den folgenden Code für eine Datei auf Ihrem Computer suchen:Python-Datei-Suchprogramm nicht schnell genug

import os, sys 
import win32api 

x=raw_input("Enter file name: ") 

drives = win32api.GetLogicalDriveStrings() 
drives = drives.split('\000')[:-1] 
for drive in drives: 
    for folderName, subfolders, filenames in os.walk(drive): 
     for filename in filenames: 
      if x.upper() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName + ': '+ filename) 
      elif x.lower() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName + ': '+ filename) 
      elif x.capitalize() in filename: 
       print"FILE FOUND!" 
       print('FILE INSIDE ' + folderName +': '+ filename) 
a=raw_input("Press any key to exit.") 
sys.exit() 

Wie Sie dieses Programm bemerkt haben nicht schnell genug ist.

Also könnte mir jemand helfen, eine schnellere und effizientere Version dieses Programms zu machen?

Danke!

+0

Was meinst du "schnell genug"? Wie schnell möchten Sie, dass es mit dem verglichen wird, was es jetzt ist? Festplattenzugriff ist im Allgemeinen sehr langsam. 'os.walk()' wurde auch in Python 3.5 aktualisiert, um viel schneller zu sein, wenn Sie also Python 2 verwenden, das dazu beitragen könnte. –

+0

Es wird nicht viel in Bezug auf die Geschwindigkeit ändern, sondern nur darauf hinweisen, dass Ihre 'if' sich gegenseitig ausschließen, so können Sie zwei von 'em 'elif's –

Antwort

1

Sie können dieses Programm nicht viel verbessern - jede statische Dateisuche muss so etwas tun. Indem Sie eine Menge Komplexität hinzufügen und parallel machen, können Sie schneller arbeiten, indem Sie verschiedene Teile des Dateisystems gleichzeitig durchlaufen und möglicherweise früher einen "Glückstreffer" ermöglichen.

Anwendungen und Dienstprogramme, die für die schnelle Suche des Dateisystems ausgelegt sind, greifen in der Regel auf die Indexierung aller Dateisysteminhalte in einer Datenbank zurück - und zwar entweder kontinuierlich im Hintergrund oder zu einer festen Tageszeit. Wenn eine Suche durchgeführt wird, führen sie lediglich eine Abfrage für diese Datenbank durch.

Diese Lösung würde jedoch die Komplexität Ihres kleinen Programms mehrmals erhöhen - und es wäre zu komplex, hier als Antwort zu schreiben;

+0

Ich schätze Ihre Antwort. Aber könnten Sie mir im ersten Absatz mehr über Ihre Idee mit einem Beispiel erzählen? Ich finde es interessant. – Vin

1

Die Reduzierung der Anzahl der Druckanweisungen sollte die Geschwindigkeit deutlich erhöhen. Wenn Sie die Dateien verfolgen müssen, können Sie Ihre Ergebnisse stattdessen in eine Protokolldatei schreiben.