Seite 1 von 1

Alle Dateien eines Datenformats anzeigen.

Verfasst: Montag 6. Mai 2013, 21:30
von MikeDee
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?

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Montag 6. Mai 2013, 21:40
von nomnom
os.walk dürfte nützlich sein. ;) Es gibt allerdings schon Software dafür, falls du es nicht gerne selbst programmieren möchtest.

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Montag 6. Mai 2013, 21:41
von Hyperion
``os`` für ``walk`` und ``fnmatch`` würd ich mal vorschlagen!

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Montag 6. Mai 2013, 21:41
von /me
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.

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 05:32
von Dami123
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.

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 13:34
von 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

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 13:41
von Hyperion
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.

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 18:42
von 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)

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 19:25
von MikeDee

Re: Alle Dateien eines Datenformats anzeigen.

Verfasst: Donnerstag 9. Mai 2013, 20:49
von 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.