Seite 1 von 1

Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Donnerstag 26. August 2021, 10:04
von mrsloom
Hallo zusammen,

ich habe vermutlich ein ziemlich einfaches Problem, bin leider noch ein Anfänger.

Ich habe einen Ordner voller Dateien (.jpg) und dazu eine .txt-Datei, in dem ein Teil der Dateinamen aus dem Ordner enthalten sind (ohne Endung .jpg). Mein Ziel ist es nun, alle Dateien, die in der Textdatei aufgelistet sind, aus dem Ordner in einen neuen Ordner zu extrahieren/kopieren. Ich weiß bereits, wie ich die .txt-Datei auslesen kann und wie ich mir die einzelnen Dateinamen in eine Liste einfügen kann. Allerdings scheitert es nun daran, wie ich die betreffenden Dateien damit suchen und verschieben kann. Ich habe bereits verschiedene Sachen ausprobiert (mit os, shutil usw.), konnte aber bisher nichts erreichen. Vielleicht hat jemand einen Tipp.


Vielen Dank (:

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Donnerstag 26. August 2021, 10:57
von __deets__
Bitte deine Code, in den dazu gedachten Tags (</>-Knopf im vollständigen Editor) posten.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Donnerstag 26. August 2021, 11:53
von __blackjack__
Grundgerüst, ohne Fehlerbehandlung falls die Zieldatei beispielsweise schon existiert (ungetestet):

Code: Alles auswählen

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

SOURCE_PATH = Path("Pfad zu den Bildern")
DESTINATION_PATH = Path("Zielpfad der Bilder")
FILANAMES_FILE_PATH = Path("Pfad zu der Datei mit den Namen/names.txt")


def main():
    with FILANAMES_FILE_PATH.open(encoding="utf-8") as lines:
        for line in lines:
            image_file_path = SOURCE_PATH / (line.strip() + ".jpg")
            if image_file_path.is_file():
                shutil.move(image_file_path, DESTINATION_PATH)


if __name__ == "__main__":
    main()

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 10:13
von mrsloom
__blackjack__ hat geschrieben: Donnerstag 26. August 2021, 11:53 Grundgerüst, ohne Fehlerbehandlung falls die Zieldatei beispielsweise schon existiert (ungetestet):

Code: Alles auswählen

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

SOURCE_PATH = Path("Pfad zu den Bildern")
DESTINATION_PATH = Path("Zielpfad der Bilder")
FILANAMES_FILE_PATH = Path("Pfad zu der Datei mit den Namen/names.txt")


def main():
    with FILANAMES_FILE_PATH.open(encoding="utf-8") as lines:
        for line in lines:
            image_file_path = SOURCE_PATH / (line.strip() + ".jpg")
            if image_file_path.is_file():
                shutil.move(image_file_path, DESTINATION_PATH)


if __name__ == "__main__":
    main()

Vielen Dank für die schnelle Hilfe, es funktioniert perfekt. Ich verwende statt shutil.move nun shutil.copy, da sich das für meine Zwecke besser eignet. (:

Code: Alles auswählen

import shutil
from pathlib import Path

SOURCE_PATH = Path("Pfad zu den Bildern")
DESTINATION_PATH = Path("Zielpfad der Bilder")
FILENAMES_FILE_PATH = Path("Pfad zu der Datei mit den Namen/names.txt")

with FILENAMES_FILE_PATH.open(encoding="utf-8") as lines:
    for line in lines:
        image_file_path = SOURCE_PATH / (line.strip() + ".jpg")
        if image_file_path.is_file():
                shutil.copy(image_file_path, DESTINATION_PATH)

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 11:15
von sls
@__blackjack__: warum verwendest du für den Pfad keinen f-String? -> f"{line.strip()}.jpg"

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 11:27
von rogerb
man kann die runden Klammern auch anders setzen:

Code: Alles auswählen

image_file_path = (SOURCE_PATH / (line.strip()).with_suffix(".jpg")
und wahrscheinlich gibt es noch 999 weitere Möglichkeiten

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 12:57
von sls
@rogerb: Es geht darum dass man Zeichenketten nicht so zusammensetzen sollte, was hier schon min. 999 mal gesagt wurde :-)

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 13:27
von rogerb
@sls
...Zeichenketten nicht so zusammensetzen sollte...
und ich habe ja auch nur gesagt, dass es in diesem Fall nicht nötig ist, "+" oder f-String zu nutzen, da die pathlib schon was dafür hat.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 13:47
von __blackjack__
Ich verwende öfter ``+`` wenn es nur *eine* Operation ist, denn dann spricht da ja nicht wirklich etwas dagegen.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 14:19
von rogerb
@__blackjack___,

wenn ich mich nicht täusche, werden "einfache" + " " + "Operationen" auch schon vom Parser zusammengefügt und der Kompiler sieht sie nur als Ganzes.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 14:29
von __deets__
rogerb hat geschrieben: Freitag 27. August 2021, 14:19 wenn ich mich nicht täusche, werden "einfache" + " " + "Operationen" auch schon vom Parser zusammengefügt und der Kompiler sieht sie nur als Ganzes.
Das kann bestenfalls bei einem Ausdruck der nur aus String-Literalen besteht der Fall sein. Ob diese Mikrooptimierung wirklich existiert, weiss ich nicht. Aber schon bei einem simplen

Code: Alles auswählen

a + "b" + "c"
kann der Interpreter bedingt durch Pythons dynamische Natur nichts optimieren. Denn a kann ein Objekt sein, dass einen __add__-Operator ueberladen hat, und nach + "b" wieder ein Objekt liefert, dass dann mit "c" addiert wird. Und dabei beliebige Semantik unterliegen kann, man kann also nicht einfach "bc" zusammenfassen.

Und das liegt hier ja vor. Der Compiler weiss nicht, dass line ein String ist.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 14:30
von sls
@rogerb: ich glaube es ging eher um die Lesbarkeit und die Fehleranfälligkeit von String-Zusammensetzungen. Großartig optimiert wird dabei im Frontend (Übersetzen) von Python nicht, sondern eher zur Laufzeit, wenn ich mich nicht täusche?

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 14:45
von rogerb
Lesbarkeit und die Fehleranfälligkeit
Ich weiß, das wurde schon oft diskutiert, und ich würde gewohnheitsmäßig auch die erste Variante verwenden, aber worin besteht denn jetzt deiner Meinung nach der Unterschied bei so etwas?

Code: Alles auswählen

anrede = "Frau"
name = "Schmidt"

#1
f"{anrede} {name}"

# 2
anrede + " " + name

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Freitag 27. August 2021, 16:04
von __deets__
Ich finde es (und das ist selbstverstaendlich subjektiv) deutlich klarer. Es sagt mit f"...." einfach sofort das hier ein String erzeugt wird. Wenn ich das ueberlese, um mir in unbekanntem Code ein Bild zu verschaffen, kann ich mich entscheiden, dass einfach links liegen zu lassen.

Ein komplexerer arithmetischer Ausdruck, der ja ueblicherweise auch noch mit str(dies) und str(das) daherkommt, muss man IMHO eben etwas muehseliger durchlesen, bis man zum Schluss kommt, was genau das macht.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Samstag 28. August 2021, 00:23
von __blackjack__
@rogerb: In #1 sind implizit `str()`-Aufrufe enthalten die bei #2 fehlen. Ist hier nur nicht relevant weil die beiden Werte schon Zeichenketten sind.

Der Fall hier ist ja auch noch übersichtlich, aber wenn davor und danach auch noch Zeichenkettenteile stehen würden, dann wird das halt schnell unübersichtlich. Ohne Syntaxhighlighting kann das bei solchen Ausdrücken dann manchmal schwieriger werden das beim Lesen auseinander zu halten was jetzt eigentlich innerhalb von Zeichenkettenliteralen steht und was ausserhalb.

Edit: Und wo es dann auch interessant wird sind Übersetzungen: Wenn man irgendwann mal anfängt die Anwendung mehrsprachig zu machen, sind grosse Vorlagen in die Daten gefüllt werden, deutlich leichter zu handhaben als lauter kleine Teilstückchen.

Re: Dateien mit Hilfe einer Textdatei sortieren

Verfasst: Samstag 28. August 2021, 10:53
von rogerb
Natürlich, sobald es über zwei einfache Stringliterale hinausgeht, ist der Fall klar. Aber du hattest ja auch selbst gesagt, dass du das in einfachen Fällen gerne mal "+" zusammenfügst.
Ich finde es ist wichtiger genau zu wissen *warum* man etwas tut, als mit religiöser Hingabe irgendwelche "man macht das so" - Floskeln herunter zu beten.