@BlackJack: Ja, da habe ich zu kurz gedacht. Mit meinem Code wird der gesuchte Pfad nicht eindeutig gefunden.
@/me: Da die Suche mit meinem Code nicht korrekt war, habe ich den Vorschlag von Dir übernommen. Alles zusammen sieht damit so aus:
Code: Alles auswählen
#!/usr/bin/env python35
import os
def get_folders(base_dir, search_name):
for dir_name, sub_directories, filenames in os.walk(base_dir):
if search_name in sub_directories:
return os.path.join(dir_name)
def main():
root_dir = 'C:\\'
seek_dir = 'VLC'
dir_name = get_folders(root_dir, 'VLC')
print(dir_name + '\\' + seek_dir + '\\')
if __name__ == "__main__":
main()
"""
Ausgabe:
C:\Program Files (x86)\VideoLAN\VLC\
Process finished with exit code 0
"""
Allerdings ist es damit nicht möglich, ein Verzeichnis mit einem bestimmten Unterverzeichnis zu suchen. Das muss aber nicht sein, wenn man das Unterverzeichnis sucht und damit den kompletten Pfad bildet. Mit anderen Worten, ich suchte vorher nach "VideoLAN\VLC" und fand "C:\Program Files (x86)\VideoLAN\VLC". Jetzt suche ich nach "VLC" und finde, wenn ich Glück habe, als erstes "C:\Program Files (x86)\VideoLAN" und kann mir daraus auch "C:\Program Files (x86)\VideoLAN\VLC" bilden, den gesuchten Installationsordner für den VLC media player.
Allerdings kann es sein, dass ich als erstes einen ganz anderen Pfad finde, zum Beispiel "C:\Mediaobjekte\VLC". Ich muss also eine weitere Suche anschließen, die nach "vlc.exe" oder sonst einer Datei, die in dem gesuchten Verzeichnis vertreten sein muss. Das wäre zwar bei meinem ersten Code ebenfalls angebracht, aber die Wahrscheinlichkeit, dass es ein Verzeichnis "C:\Program Files (x86)\VideoLAN\VLC" gibt, das nicht das Installationsverzeichnis für den VLC ist, geht gegen Null.
Für eine weitere Suche hast Du die Verwendung von `yield`an Stelle von 'return' vorgeschlagen. Wenn ich es richtig sehe, kann man damit eine rekursive Suche konstruieren. Das ist mir aber bislang noch nicht gelungen. Versucht habe ich den Aufruf über eine Endlosschleife. Kannst Du eine Beschreibung der Generatorfunktion empfehlen? Schön wäre eine deutsche.
Bei meinem letzten nicht funktionierender Versuch sieht der Aufruf so aus:
Code: Alles auswählen
def main():
root_dir = 'D:\\'
seek_dir = 'VLC'
dir_name = get_folders(root_dir, 'VLC')
while True:
print(dir_name + '\\' + seek_dir + '\\')
# hier auf richtiges Verzeichnis prüfen und gegebenenfals abbrechen
dir_name = next(get_folders)
Natürlich ist in get_folders() das "return" durch "yield" ersetzt.