Seite 1 von 1
Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 14:56
von Doerpi
Hallo Python-Freunde!
ich benötige ein Script mit dem ich Dateien aus einem Ordner erfassen kann und diese in einer bestimmten Spalte einer CSV aufliste. Im späteren Verlauf bzw. bei mehrmaligen nutzen des Scripts soll es die CSV einlesen, dann den Ordnerinhalt einlesen und die Einträge abgleichen und neue Dateien am Ende der CSV neu anhängen. Mein bisheriger Ansatz wäre mit dem os-Modul die Inhalte zu erfassen und aufzulisten
doch wie wandle ich das in eine CSV um bzw. wie schreibe ich die liste nun gezielt in eine CSV Spalte?
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 15:01
von Sirius3
Dafür gibt es das csv-Modul.
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 15:37
von Doerpi
ja aber wie mache ich die Übergabe in das Modul?
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 15:49
von __deets__
Hast du die Dokumentation des Moduls gelesen? Die Beispiele gesehen? Mal ausprobiert?
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 16:24
von Doerpi
Ja ich habe mehreres probiert, habe aber irgendwo einen Denkfehler. Muss ich mir nicht nach dem
erstmal eine Ausgabe der Informationen erstellen um diese weiterzuverarbeiten?
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 16:28
von noisefloor
Hallo,
bzw. wie schreibe ich die liste nun gezielt in eine CSV Spalte?
Die musst die CSV Datei (zeilenweise) einlesen, die Zeile an der entsprechende Stelle aktualisieren und dann wieder neu schreiben.
Von der Beschreibung her hört sich das aber auch so an, als würde eine SQL-Datenbank wie SQLite auch eine sinnvolle Option sein. Python hat SQLite ja an Bord.
Gruß, noisefloor
Re: Ordnerinhalte auslesen und in eine CSV eintragen
Verfasst: Freitag 3. April 2020, 18:03
von __blackjack__
@Doerpi: Das ist alles ein bischen komplizierter als diese drei Zeilen von denen die mit dem `a` schlecht ist, weil der Name sehr schlecht ist, und die dritte Zeile keinen Sinn macht weil mit dem Ergebnis des `listdir()`-Aufrufs überhaupt nichts gemacht wird.
In neuem Code würde ich auch nicht mehr mit `os` für so etwas anfangen sondern gleich das `pathlib`-Modul verwenden.
Auf Modulebene hat die letzte Zeile auch nichts zu suchen. Da gehört nur Code hin der Konstanten, Funktionen, und Klassen definiert. Also der Pfad könnte da mit einem vernünftigeren Namen stehen, falls es sich dabei um eine Konstante handelt.
Ansonsten müsstest Du das Problem in kleinere Teilprobleme aufteilen und dann Funktionen schreiben, mit denen sich diese Teilprobleme in wenigen Zeilen lösen lassen. Jede Funktion testen, ob sie funktioniert, bevor man die nächste schreibt.
Die Dateinamen in eine Spalte schreiben klingt auch ein bisschen sehr vereinfacht. Stehen da schon Daten? Dann wird man ja wahrscheinlich nicht einfach beliebige Dateinamen in beliebige Datensätze schreiben können, sondern muss die irgendwie zuordnen‽ Du musst eventuell auch bedenken das die Dateinamen in keiner definierten Reihenfolge kommen. Auch wenn das vielleicht anders aussieht, weder `os.listdir()` noch die `Path`-Methoden garantieren eine Ordnung auf dem Ergebnis. Wenn die in jedem Fall sortiert sein sollen, muss man das explizit selbst tun.
Beim Abgleich der Dateinamen aus der CSV-Datei mit dem was vom Dateisystem kommt, kann der `set()`-Datentyp hilfreich sein.
Bei der CSV-Datei und Dateinamen muss man auch aufpassen, dass Dateinamen nicht auf jedem System Text sind. Es gibt Dateisysteme wo ein Dateiname aus beliebigen Bytefolgen ausgenommen Nullbytes und einem Pfadtrenner bestehen können.