Alle Dateien eines Datenformats anzeigen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
MikeDee
User
Beiträge: 31
Registriert: Samstag 5. November 2011, 12:41

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?
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

os.walk dürfte nützlich sein. ;) Es gibt allerdings schon Software dafür, falls du es nicht gerne selbst programmieren möchtest.
Benutzeravatar
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
Benutzeravatar
/me
User
Beiträge: 3557
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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?
Nichts außer der Standardbibliothek. Grundsätzlich klingt das nach einer Aufgabe für os.walk.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

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.
JohnDoe

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
Benutzeravatar
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
JohnDoe

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.
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.

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)
Benutzeravatar
MikeDee
User
Beiträge: 31
Registriert: Samstag 5. November 2011, 12:41

JohnDoe

MikeDee hat geschrieben:Wie wäre es damit? http://www.pythonforbeginners.com/syste ... in-python/
Wow, das ist tatsächlich einfach und elegant gelöst.
Antworten