in txt datei zeilenanzahl lesen und in eine zeile schreiben

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
max793
User
Beiträge: 58
Registriert: Montag 11. Mai 2009, 10:05

hallo

ich gern wissen, wie man in einer text datei die zeilenanzahl auslesen kann und dann in eine bestimmte zeile schreiben.

Für mich hieße das ich erstelle eine txt- datei und und muss dann mit hilfe einer schleife immer in eine neue zeile eine zahl schreiben. würde dann so aussehen:
1
2
3
4
5
6
7
.
.
.
habt ihr da eine idee

danke
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

dafür musst du die ganze Datei auslesen. Am besten mit readlines().

Mehr Informationen dazu findest du hier. Das Schreiben und Voranstellen der Zeilennummer ist dann ja entsrprechend simpel.

Gruß,

brb
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Barabbas hat geschrieben:dafür musst du die ganze Datei auslesen. Am besten mit readlines().
Je nach Datei ist das ggf. eine fürchterliche Lösung. Ich möchte nicht, dass ein Programm einfach mal eine komplette Datei mit 25 MB einliest, wenn es gar nicht nötig ist.

Üblicherweise würde man da eine neue Datei erstellen und dann diese über die alte Datei drüberkopieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Ja, klar. Bezogen auf die Frage stimmt das aber: Wenn ich an jede Zeile in einer Datei etwas anhängen möchte, muss ich die ganze Datei einlesen und neu schreiben. Ob das in einem Rutsch oder nach und nach geschieht, habe ich ja auch gar nicht gesagt ;).
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

So gehts auch! :D
aber dafür ist es etwas unverständlich! :roll:

Code: Alles auswählen

print "Du musst drei sachen in die Datei schreiben"
a1 = raw_input("Nr. 1: ")
a2 = raw_input("Nr. 2: ")
a3 = raw_input("Nr. 3: ")
split1 = "#"
data = file("test.txt","w")
data.write(a1)
data.write(split1)
data.write(a2)
data.write(split1)
data.write(a3)
data = file("test.txt","r")
for dat1 in data:
  dat1 = dat1.strip()
  wurter = dat1.split(split1) # Teilt den Zusammengeschriebenen Satz an split1(#) auf
nr = input("Schreibe die Nr. des Wortes was du sehen willst: ")
print wurter[nr-1] # -1 Weil die Aufzählung bei 0 beginnt
data.close() 
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Also ich würde nicht umbedingt readlines() verwenden wenn du nicht weißt wie groß die Datei ist, das hat mir mein Lehrer eingeprügelt :P

Sind die Zahlen schon eingetragen in der Datei oder nicht?

Also wenn ja dan öffnest du die Datei und liest jede Zeile mit readline() und machste solange bis die Datei zu Ende ist. Du Zählst einfach mit wieviele Zeilen deine Datei hat.
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

txt Datei? Warum ausgerechnet die? Kann ja auch ne ipo, iro, shru, skeosm, apqj, dlkab, leo, sooe, makw, reg, aje, alter, oder gahleteodtehedo Datei sein! :wink:
gruß Krisi
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Bin mir nicht sicher ob es die ursprüngliche Fragestellung trifft, aber:

Code: Alles auswählen

from __future__ import with_statement
from itertools import starmap
from optparse import OptionParser
from contextlib import nested

def main():
    option_parser = OptionParser()

    for option_tuple in (("-i", "--input", "input"), ("-o", "--output", "output")):
        option_parser.add_option(dest=option_tuple[2], *option_tuple[:2])

    options, args = option_parser.parse_args()

    if any(not opt for opt in (options.input, options.output)):
        raise Exception() # ...

    with nested(*starmap(open, ((options.input, "rb"), (options.output, "wb")))) as (a, b):
        for i, line in enumerate(a):
            b.write(("%d " % i) + line)

if __name__ == "__main__":
    main()
*<- hat gerade ein Webprojekt fertiggestellt und ist froh, mal wieder sowas schreiben zu können*
Antworten