Seite 1 von 1

Inhalte (TIF-Dateien) in Unterordnern als Listen erzeugen

Verfasst: Montag 2. Dezember 2024, 13:00
von mediamarc
Hallo zusammen,
ich habe folgendes Problem:
Mit meinem Script versuche ich, alle TIF-Dateien pro Unterordner als Listen in einer Liste zu erzeugen. In meinem Testverzeichnis befinden sich zwei Unterordner, die TIF-Dateien enthalten, leider erzeugt mein Script aber keine zwei Listen, sondern insgesamt fünf Listen. Den einen Unterordner dreimal und den anderen zweimal. Nach längerem Suchen des Fehlers, habe ich leider noch keine Löäsung finden können.
Hier mein Script:

Code: Alles auswählen

import os

sub_folders_path = '/PFAD/ZUM/MUTTERVERZEICHNIS/'

image_paths_all = []

for path, dirs, files in os.walk(sub_folders_path, topdown=False):
    for filename in files:
        if filename.endswith(".tif"):

            path = os.path.join(sub_folders_path, path)
            #print(path)
            files = os.listdir(path)
            #print(files)
            files_path = [os.path.join(file) for file in files]
            #print(files_path)
            image_paths_all.append(files_path)

print(image_paths_all)

ersteliste = image_paths_all[4] #komischerweise sind da 5 Listen (0 bis 4) erzeugt worden, obwohl nur zwei verschiedene Unterordner existieren

print(ersteliste)

Re: Inhalte (TIF-Dateien) in Unterordnern als Listen erzeugen

Verfasst: Montag 2. Dezember 2024, 13:15
von Sirius3
Versuche Deinen Code so zu lesen, was Du tatsächlich geschrieben hast: Suche alle TIF-Dateien und für jede TIF-Datei erzeuge eine Liste mit allen TIF-Dateien in diesem Verzeichnis.
Dadurch dass Du mehrfach durch die Verzeichnisse gehst, ist das nicht nur ineffizient, sondern dadurch können auch leicht Fehler passieren.
Ein weiterer Fehler ist, dass Du in files_path os.path.join ohne Verzeichnis aufrufst.
os.walk oder listdir verwendet man heutzutage nicht mehr, statt dessen gibt es pathlib:

Code: Alles auswählen

from collections import defaultdict
from pathlib import Path

SUB_FOLDER = '/PFAD/ZUM/MUTTERVERZEICHNIS/'

def main():
    all_image_paths = defaultdict(list)
    for path in Path(SUB_FOLDER).rglob('*.tif'):
        all_image_paths[path.parent].append(path)

    print(all_image_paths)


if __name__ == "__main__":
    main()

Re: Inhalte (TIF-Dateien) in Unterordnern als Listen erzeugen

Verfasst: Montag 2. Dezember 2024, 20:56
von mediamarc
Danke dir