Seite 1 von 1

Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 13:31
von LeoPold
Hallo Zusammen,

auch ich bin neu hier und in der Python-Programmierung.
Das Forum finde ich echt Klasse, denn es hat mir schon bei einigen Problemen weiter geholfen.

Aktuell möchte ich ein Verzeichnis nach Dateien mit einer bestimmter Endung durchsuchen und den Pfad in eine Liste übergeben. Das klappt soweit.
Jetzt würde ich gerne, wenn keine Datei mit dieser Endung gefunden wurde in die Liste z.B. "no_file_found" eintragen. Das bekomme ich leider nicht gelöst.

Könntet ihr mir da weiter helfen?

Code: Alles auswählen

import os

path = r"C:\Users\LeoPold\Desktop\Test\Neuer Ordner"

directorypath_pc = []
def search_files(root, ext):
    for root, dirs, files in os.walk(root):
        for f in files:
            if f.lower().endswith(ext):
                f = os.path.join(root, f)
                yield f
        for d in dirs:
            d = os.path.join(root, d)
            search_files(d, ext)

i = 0
for name in search_files(path, ".txt"):
    directorypath_pc.append(name)
    i = i + 1
print(directorypath_pc)

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 14:50
von __blackjack__
@LeoPold: Wo ist denn das Problem? Du musst doch nur testen ob die Liste am Ende leer ist und falls ja den Text einfügen.

Statt `os` würde man in neuem Code `pathlib` für Pfade verwenden. Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path


def search_files(root, suffix):
    suffix = suffix.lower()
    return (path for path in root.rglob("*") if path.suffix.lower() == suffix)


def main():
    path = Path(R"C:\Users\LeoPold\Desktop\Test\Neuer Ordner")
    text_file_paths = list(search_files(path, ".txt"))
    print(text_file_paths)


if __name__ == "__main__":
    main()

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 14:54
von einfachTobi
pathlib.Path.glob() kann da nützlich sein.
Will heißen:

Code: Alles auswählen

from pathlib import Path

path = Path(r"C:\dev")
def search_files(root, extension):
    return list(root.glob(f"**/*.{extension}")) or ["no files found"]

print(search_files(path, "txt"))
Wobei ich eher erwarten würde eine leere Liste zu erhalten, wenn nichts gefunden wurde. Dann kannst du auch gleich list(root.glob(f"**/*.{extension}")) schreiben.

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 15:05
von Sirius3
@__blackjack__: da bei Windows die Filesysteme normalerweise groß-klein-Schreibung ignorieren vereinfacht sich der Code auf:

Code: Alles auswählen

    path = Path(r"C:\Users\LeoPold\Desktop\Test\Neuer Ordner")
    text_file_paths = list(path.rglob("*.txt"))

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 15:41
von LeoPold
Vielen Dank, ihr habt mir weiter geholfen.
Viele Grüße LeoPold

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 16:12
von __blackjack__
@Sirius3: Jo, aber funktioniert halt nur unter Windows so.

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 16:28
von Sirius3
@__blackjack__: sonst hat ja auch niemand .TXT-Dateien.

Re: Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

Verfasst: Freitag 5. März 2021, 16:53
von __blackjack__
@Sirius3: Doch, die bekommt man auf den anderen Systemen zum Beispiel über Archivdateien von Windows-Systemen eingeschleppt. 🙂