Schleife um jede Zeile einer Datei nacheinander zu bearbeite

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
ernestovaya
User
Beiträge: 7
Registriert: Dienstag 16. Oktober 2012, 13:47

Hallo,

ich beschäftige mich erst seit kurzem mit Python und habe folgendes Problem:
Ich habe in einer temporären Datei eine Liste mit dem Verzeichnis von einem gewissen Dateityp erstellt. Nun bräuchte ich eine Schleife die auf diese Datei zugreift und nacheinander für jede Zeile eine bestimme Datei öffnet/erstellt und in diese Datei den Dateinamen der jeweiligen Zeile, schreibt.

Vielen Dank für Hinweise!

Code: Alles auswählen

import os
for r,d,f in os.walk("C:/Sontiges/"):
    for files in f:
        if files.endswith(".txt"):

            from tempfile import TemporaryFile
            t = TemporaryFile()
            datalist = os.path.join(r,files)

            t.write(datalist)
            
            with TemporaryFile() as tempf:
                tempf.write(datalist)
                tempf.seek(0)
                templist = tempf.read()

                lines = ?
                for lines in templist:
                    f = open("P:/test.txt", 'w')
                    f.write('Dateinamen')
                    f.close()
Zuletzt geändert von Anonymous am Freitag 2. November 2012, 14:31, insgesamt 1-mal geändert.
Grund: Code-Formatierung korrigiert
BlackJack

@ernestovaya: Das ist alles sehr verwirrend was Du da machst. Als erstes solltest Du Dir einbuchstabige Namen abgewöhnen. Bei rein mathematischen Problemen oder bei Zählvariablen oder Koordinaten ist so etwas wie `i`, `j`, `k`, und `x`, `y` in Ordnung, weil es da übliche Namen sind. In sehr begrenzten Kontexten wie „list comprehensions” und Generatorausdrücken geht es auch noch. Aber ansonsten sollten Namen leicht verständlich die Bedeutung der Werte dahinter widerspiegeln.

Der Name `files` ist irreführend. Daran ist *ein* Datei*name* gebunden, und nicht wie der Name suggeriert ein Container-Typ, zum Beispiel eine Liste, die Dateiobjekte enthält. Gleiches gilt für `datalist` was an einen *einzelnen* Pfadnamen gebunden wird.

Man sollte auch nicht den gleichen Namen im gleichen Kontext an semantisch total unterschiedliche Werte binden. Im Beispiel steht `f` einmal für eine Liste mit Pfaden und in der gleichen Schleife wird es auch für eine Datei benutzt. Das ist verwirrend.

Importe sollte in der Regel am Anfang des Moduls stehen. In besonderen Ausnahmefällen kann man einen Import auch in eine Funktion ziehen. Aber in einer Schleife macht es eigentlich niemals Sinn.

Dateien die man öffnet, sollte man auch explizit wieder schliessen. Das Dateiobjekt, das an `t` gebunden wird, wird weder geschlossen noch tatsächlich im weiteren Verlauf sinnvoll genutzt.

Bei dem Dateiobjekt, das an `tempf` gebunden wird, stellt sich die Frage was das soll. Da wird etwas rein geschrieben, nur um es danach gleich wieder auszulesen. Aber *warum*‽

Letztendlich passt der Quelltext nicht zur Problembeschreibung. Nach der hast Du eine temporäre Datei erstellt und willst deren Zeilen verarbeiten. Der Quelltext öffnet aber nicht etwa diese Datei, sondern fängt damit an einen Verzeichnisbaum abzulaufen‽

Die Frage im Betreff lässt sich jedenfalls recht simpel so beantworten:

Code: Alles auswählen

with open('dateiname') as lines:
    for line in lines:
        do_something_with(line)
Und das ist im Grunde Basiswissen, was fast jedes Tutorial abdecken sollte.
Antworten