In Bezug auf question1:
Sie fragen nach einem Glob-Ausdruck. Beachten Sie, dass der von Ihnen gepostete Ausdruck nicht unbedingt eindeutig ist, sodass er mehrere Verzeichnisse (und Dateien) abgleichen kann. Um diese Dateien/Verzeichnisse, können Sie die Verwendung glob
module
import glob
for result in glob.iglob('/path/to/one/*/dir/and/*/and/*'):
find('myFile.txt', result)
Ich nehme an, dass Sie vielleicht prüfen, ob result
ist ein Verzeichnis, bevor Sie versuchen, eine Datei darin zu finden ... (os.path.isdir(result)
)
zu Frage 2:
ich glaube, Sie wollen wahrscheinlich nur wissen, ob die Datei die Sie suchen in
Dateien und dann/yield
den vollständigen Pfad drucken:
Es gibt nichts "unpythonic" über das Schreiben if x == y
- Es ist eigentlich ziemlich üblich. In Ihrem Fall mussten Sie das jedoch nicht wirklich tun. Die pythonische Sache ist, eingebaute Operatoren zu verwenden, um nach dem gewünschten Objekt in der Liste zu suchen und die Ausgabe einfach darauf aufzubauen, ob Sie etwas gefunden haben oder nicht. Auch deutete ich es oben, aber es ist oft schöner (und wiederverwendbare) zu yield
die Ergebnisse und nicht nur sie zu drucken:
def find(filename, path):
for root, dirs, files in os.walk(path):
if filename in files:
yield os.path.join(root, filename)
Jetzt können Sie es in den Anrufern drucken (oder andere Dinge tun mit ihm ...):
for filename in find(needle, haystack):
print(filename)
Hallo @mgilson. Wunderbar, genau das, was ich wollte. Vielen Dank ! – Riad