Verzeichnis nach Dateien mit bestimmter Endung durchsuchen

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
LeoPold
User
Beiträge: 7
Registriert: Freitag 5. März 2021, 12:52

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)
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

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.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@__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"))
LeoPold
User
Beiträge: 7
Registriert: Freitag 5. März 2021, 12:52

Vielen Dank, ihr habt mir weiter geholfen.
Viele Grüße LeoPold
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Jo, aber funktioniert halt nur unter Windows so.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@__blackjack__: sonst hat ja auch niemand .TXT-Dateien.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Doch, die bekommt man auf den anderen Systemen zum Beispiel über Archivdateien von Windows-Systemen eingeschleppt. 🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten