Datei ab bestimmten Zeichen auslesen

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
Silvio1985
User
Beiträge: 3
Registriert: Montag 25. April 2016, 14:19

Hallo zusammen,
wahrscheinlich ist es total easy was ich wissen möchten;-) bin aber noch anfänger was das an geht.

ich möchte eine Datei auslesen aber nur ab einem = .


das auslesen der ganzem datei mach ich mit open(file,"r")

hab ihr da eine Lösung für mich!

mfg silvio
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Silvio1985 hat geschrieben:ich möchte eine Datei auslesen aber nur ab einem = .

das auslesen der ganzem datei mach ich mit open(file,"r")
Mit open liest du eine Datei nicht, sondern öffnest sie nur. Prinzipiell musst du die Datei mit read (siehe Methods of File Objects) von Anfang an lesen um die Stelle zu finden an der das gesuchte Zeichen zum ersten Mal auftritt.

Danach liest du dann den Rest der Datei und tust das damit was du dafür vorgesehen hast.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

text = 'ham=spam'
head, sep, tail = text.partition('=')
print(tail)  # -> spam
Mal komplett ausformuliert:

Code: Alles auswählen

def lines_after(sep, lines):
    for line in lines:
        if sep in line:
            break
    head, sep, tail = line.partition(sep)
    yield tail
    yield from lines

def main():
    with open('septest.txt', 'w') as outfile:
        outfile.write('foo\nbar\baz=ham\nspam\neggs\n')
    with open('septest.txt') as infile:
        result = lines_after('=', infile)
        print(''.join(result))

if __name__ == '__main__':
    main()
Übrigens: Statt `.partion()` könnte man auch `.index()` nutzen. Ich finde es aber mit `.partition()` schöner.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und wenn man ganz sicher gehen will, dann fügt man zu Beginn der `lines_after()`-Funktion noch ein ``lines = iter(lines)`` ein, um zu garantieren, dass man auf einem Iterator arbeitet, da es andernfalls zum Beispiel bei der Übergabe von Listen zu einem unerwarteten Ergebnis kommen würde.
Antworten