Datei zeilenweise ändern: Zeile mitloggen

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
fredistdurstig
User
Beiträge: 13
Registriert: Sonntag 18. Januar 2009, 20:08

Hallo Leute,

ich parse mit meinem Programm eine Datei durch und nehme in mehreren Zeilen Ersetzungen vor.
Nun möchte ich diese Ersetzungen gerne loggen, und dafür will ich die Zeilennummern der veränderten Zeilen aufzeichnen.
Muss ich dafür eine extra-Zählvariable anlegen oder geht das auch eleganter?

Hier ein beispielhafter Code-Ausschnitt (letzte Zeile ist relevant):

Code: Alles auswählen

for root, folder, files in os.walk(cwd) :
    for file in files:
        if file[-3:] == ".txt":
            filename = str(root) + "\\" + str(file)
            f = open(filename, "r")
            # Zeilenende rausnehmen
            if line[-1] == '\n': line = line[:-1]
            for line in f:
                sub1 = "SuchString";
                if sub1 in line:
                    myLogger.log(filename, #ZEILENNUMMER??)
Dank Euch schonmal!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Schau dir mal enumerate an.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
fredistdurstig
User
Beiträge: 13
Registriert: Sonntag 18. Januar 2009, 20:08

Herzlichen Dank! Enumerate kannte ich noch nicht. Wusste doch, das Python für das Problem was elegantes hat.
Habe es erfolgreich eingebaut, ungefähr so:

Code: Alles auswählen

for root, folder, files in os.walk(cwd) :
    for file in files:
        if file[-3:] == ".txt":
            filename = str(root) + "\\" + str(file)
            f = open(filename, "r")
            for linenr, line in enumerate(f):
                sub1 = "SuchString";
                if sub1 in line:
                    myLogger.log(filename, linenr)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Die Endung würde ich eher mit fnmatch abfragen. Zur Veranschaulichung:

Code: Alles auswählen

from fnmatch import fnmatch
import os

for root, folder, files in os.walk(cwd):
    for filename in files:
        if fnmatch(filename, '*.txt'):
            print filename
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Hey, fnmatch kannte ich noch gar nicht. Das ist ja praktisch, bisher habe ich immer mit endswith oder splitext rumgewurschtelt...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten