Seite 1 von 1

Bilder sortieren/ Ordner anlegen

Verfasst: Dienstag 25. Mai 2021, 21:31
von paraolympicgoldh
hallo zusammen

hintergrundinformationen(lesefaule können das überspringen :P )
im rahmen eines projektes für mein studium (ich studiere nicht informatik oder irgendwas in diese richtung) versuche ich ein sortierprogramm für bilder zu schreiben.

ich bin ziemlich neu, was programmieren anbelangt, also bitte habt nachsicht, falls ich mal dumme fragen stelle

da wir mehrere projektmitglieder sind, und alle recht unerfahren, arbeiten wir aktuell an unters. dateien, diese funktionieren tw. auch

für die "struktur" des programmes haben wir uns folgendes überlegt:
1. programmstart
2. ordner auswählen in dem die bilder sind
3. popup fenster mit buttons für die gewünschten filterkriterien (z.b. autor, datum etc)
4. automatisches erstellen von ordnern für die unterschiedlichen werte beim filterkriterium (also falls nach autor(=filterkriterium) sortiert wurde, wird ein ordner autor1, autor2(=werte) erstellt)
5. die bilder aus dem ursprungsordner werden in die neu erstellten ordner verschoben bzw. kopiert (muss dann noch mit schritt 3 verbunden werden)
6. bestätigungsmeldung


aktuell haben wir beim 4. schritt probleme

der folgende code dreht sich nur um schritt4, denke das ist übersichtlicher

eigentliches problem:
wir haben es geschafft, dass ein ordner mit dem namen des autors erstellt wird, allerdings muss der name der bilddatei "manuell" eingegeben werden (im code: MicrosoftTeams-image.jpg) und der code funktioniert nur für ein bild. unser ziel wäre es, dass es automatisch alle bilddateien im ursprungsordner einliest und dann nach den werten bzw. autoren mehrere ordner erstellt

hat jemand einen tipp wie ich das realisieren kann, ich erwarte hier auch keinen funktionierenden code, aber wäre dankbar wenn mir jemand sagen könnte mit welchen funktionen/befehlen ich das umsetzen kann oder nach welchen stichwörtern ich suchen sollte. ich vermute ich muss irgendwie eine if funktion einbauen, die den ursprungsordner solange durchgeht, bis jeder autor einen eigenen ordner hat

Code: Alles auswählen

from PIL import Image
from PIL.ExifTags import TAGS
import os


image = Image.open("MicrosoftTeams-image.jpg")

exifdata = image.getexif()

for tag_id in exifdata:
    tag = TAGS.get(tag_id, tag_id)
    data = exifdata.get(tag_id)
    if isinstance(data, bytes):
        data = data.decode(encoding='latin-1', errors='strict')

    if tag == "Artist":
        os.makedirs(data, mode = 0o777, exist_ok = True)
        
schonmal danke im voraus für eure antworten

Re: Bilder sortieren/ Ordner anlegen

Verfasst: Donnerstag 27. Mai 2021, 05:56
von sparrow
Alles was mit Pfaden und darüber iterieren zu tun hat, macht man in aktuellen Python Versionen mit dem 'pathlib' Modul.
Als erstes Teilproblem wäre also zu lösen damit über die Bilder zu iterieren.
Dann kommt euer Teil mit der Logik, daraus die nötigen Informationen zu ziehen.
Anschließend müsst ihr mit diesen Informationen weiter arbeiten. Ordner würde ich auch mit pathlib anlegen.

Re: Bilder sortieren/ Ordner anlegen

Verfasst: Donnerstag 27. Mai 2021, 06:56
von Sirius3
Als erstes schreibt man eine Funktion, die für eine Datei die passenden Daten heraussucht:

Code: Alles auswählen

def get_image_tag(imagepath, tag):
    image = Image.open(imagepath)
    exifdata = image.getexif()

    for tag_id in exifdata:
        tag_name = TAGS.get(tag_id, tag_id)
        if tag_name == tag:
            data = exifdata[tag_id]
            if isinstance(data, bytes):
                data = data.decode('latin-1')
            return data
    # TODO: was tun, wenn Tag nicht existiert?
    return "unknown"
Dann kann man eine Funktion schreiben, die für eine Menge an Dateien, diese Information sammelt.
Und als letztes nimmt man diese Information, erzeugt Verzeichnisse und verschiebt die Dateien.