Der Titel wird wahrscheinlich niemandem gerecht, also lass mich direkt darauf eingehen. Ich versuche, ein Programm zu schreiben, das mein Laufwerk E:\
für eine Liste von Wörtern wie water
, fire
und air
scannen wird. In meinem Laufwerk E:\
habe ich natürlich Ordner innerhalb von Ordnern und Dateien innerhalb der Ordner und so weiter.Verzeichnisse scannen, Zeichenkette in Dateien finden und Ergebnisse drucken
Ich möchte die Funktion search (path, text)
aufrufen, die im Text die Liste ['water', 'fire', 'air']
eingeben kann. So würde es so aussehen: search('E:\\', ['water', 'fire', 'air'])
.
Ich möchte in der Lage sein, das Verzeichnis (die Verzeichnisse) zu scannen und mit jeder Zeile, die gescannt wird, Scanning: E:\\...
zu drucken. Ich habe das. Ich möchte auch, wenn es Wasser, Feuer und/oder Luft findet, um In (directory name) found water, fire
auszugeben; In (directory name) found air
usw. Ich habe den größten Teil dieses Teils. Ich kann nicht herausfinden, wie man es bekommt, um mehrere Wörter anzuzeigen (falls zutreffend).
Ein Ausgang ich suche wie dies zum Beispiel wäre:
Scanning: E:\ Scanning: E:\Python Fun! Scanning: E:\Python Fun!\1st Week Scanning: E:\Python Fun!\2nd Week Scanning: E:\Python Fun!\3rd Week In E:\Python Fun!\3rd Week\elements.txt found 'fire', 'water' Scanning: E:\Python Fun!\4th Week Scanning: E:\Python Fun!\5th Week In E:\Python Fun!\5th Week\elements.txt found 'air Scanning...
Und so weiter
Hier ist mein Code:
import os
def search(path, text):
for text in texts:
if os.path.isfile(path): #base case
if text in path:
print(path)
return
if not os.path.exists(path):
return
for item in os.listdir(path):
itempath = os.path.join(path, item)
if os.path.isfile(itempath):
if text in item:
print('In {} found {}'.format(itempath, word))
elif os.path.isdir(itempath):
search(itempath, text)
print('Scanning:', path)
#open(itempath).read() #tested this but got an error. See below.
else: #unknown object type
pass
search('E:\\',['water','fire', 'air'])
Der Traceback
Fehler, den ich bekam, war AttributeError: 'str' object has no attribute 'read'
. Also habe ich es auskommentiert.
Mit diesem Code bekomme ich Ergebnisse von im Grunde den letzten Buchstaben von was auch immer in meiner Liste ist, in diesem Fall r
als was wird gesucht. Ich denke das liegt an einer extra Schleife? Aber nicht genau.
Ich weiß, ich muss irgendwo eine open filename
hinzufügen, aber wieder bin ich verwirrt, wie man das implementiert. Ich habe gerade angefangen, etwas über das OS-Modul zu lernen, und hier kommt der Großteil der Verwirrung ins Spiel. Ich bin ratlos.
Gibt es möglicherweise einen Weg, es ohne glob zu tun? Es wird wahrscheinlich den Code weniger einfach machen, was erwartet wird. Aber ich würde gerne die Details von Python lernen und dann später in die Abkürzungen einsteigen, damit ich weiß, was ich mache und worauf ich achten muss, wenn ich mit einer komplizierten Situation konfrontiert werde. – adhamncheese