Alle Dateien eines Datenformats anzeigen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
``os`` für ``walk`` und ``fnmatch`` würd ich mal vorschlagen!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Nichts außer der Standardbibliothek. Grundsätzlich klingt das nach einer Aufgabe für os.walk.MikeDee hat geschrieben:Ich möchte eine Liste mit allen Dateien, auf meinem Rechner, eines beliebigen ausgewählten Datenformats (jpg, pdf) erstellen. Welche Module brauche ich dafür?
Ich hab damals die copytree Funktion von shutil so modifiziert, dass nur Dateien von einem bestimmten Dateityp kopiert werden, oder eine komplett leere Kopie des Verzeichnisses angelegt wird.
Man könnte es auch so hinbiegen, dass eine DateiListe mit den jeweiligen Endungen erstellt wird.
Mit os.walk ist es natürlich auch möglich.
Man könnte es auch so hinbiegen, dass eine DateiListe mit den jeweiligen Endungen erstellt wird.
Mit os.walk ist es natürlich auch möglich.
Ich muss jetzt einfach mal dumm fragen: Wäre es nicht sinnvoller, mit os.path.isfile() und os.path.isdir() schnell selbst eine Suche zu schreiben? Wäre viel anpassbarer, man kann die Tiefsuche begrenzen und zudem erhält man vollständige Pfadangaben.
Oder kann das os.walk() auch und ich habs nur übersehen?
mfg
Oder kann das os.walk() auch und ich habs nur übersehen?
mfg
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
JohnDoe hat geschrieben:Oder kann das os.walk() auch und ich habs nur übersehen?
Python Doku hat geschrieben: If optional argument topdown is True or not specified, the triple for a directory is generated before the triples for any of its subdirectories (directories are generated top-down). If topdown is False, the triple for a directory is generated after the triples for all of its subdirectories (directories are generated bottom-up).
When topdown is True, the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, impose a specific order of visiting, or even to inform walk() about directories the caller creates or renames before it resumes walk() again. Modifying dirnames when topdown is False is ineffective, because in bottom-up mode the directories in dirnames are generated before dirpath itself is generated.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Das klingt für mich nicht gerade einfach, kannst du mir ein praktisches Beispiel geben wie man das effektiv anwendet? Zum Vergleich eine einfache Suche die alle jpgs auflistet, inklusive Begrenzung für die Suchtiefe.Hyperion hat geschrieben:Python Doku hat geschrieben:If optional argument topdown is True or not specified, the triple for a directory is generated before the triples for any of its subdirectories (directories are generated top-down). If topdown is False, the triple for a directory is generated after the triples for all of its subdirectories (directories are generated bottom-up).
When topdown is True, the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, impose a specific order of visiting, or even to inform walk() about directories the caller creates or renames before it resumes walk() again. Modifying dirnames when topdown is False is ineffective, because in bottom-up mode the directories in dirnames are generated before dirpath itself is generated.
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
path = '/home/username'
level = 5 # Sucht aktuell 4 Ebenen tief, mit -1 wird gesucht was das Zeug hält :)
filter = '.jpg'
def search(path, level, filter):
local_list = []
if os.path.islink(path):
print('Link: %s' % path)
elif level > 0 or level < 0:
directorylist = os.listdir(path)
for element in directorylist:
if os.path.isdir(path + os.sep + element):
newpath = path + os.sep + element
newlevel = level - 1
search(newpath, newlevel, filter)
else:
newpath = path + os.sep + element
if newpath.endswith(filter):
print(newpath)
if __name__ == '__main__':
search(path, level, filter)
Wie wäre es damit? http://www.pythonforbeginners.com/syste ... in-python/
Wow, das ist tatsächlich einfach und elegant gelöst.MikeDee hat geschrieben:Wie wäre es damit? http://www.pythonforbeginners.com/syste ... in-python/