In der Tat, meine Fassung ist etwas arg kondensiert. Das liegt aber daran, dass ich sie von den inneren Funktionen her geschrieben und erst nachträglich Zeilenumbrüche eingefügt habe. Emacs denkt dabei eher an ein Lisp-artiges Layout. Seid froh, dass ich nicht meine erste funktionierende Version, die im Kern nur aus einer Zeile bestand, gepostet habegerold hat geschrieben:Was so ein paar Zeilenumbrüche und Einrückungen ausmachen
aus txt auslesen
Ja, dann ist alles i.O. Bisher die kürzeste Variante (Wenn man es genau nimmt ist es ja ein Dreizeiler.).
@Gerold:
Dein zweites paste gefällt mir besser als dein erstes, weil du da über ``itertools.count`` iterierst anstatt ``while`` zu nutzen.
lg
@Gerold:
Dein zweites paste gefällt mir besser als dein erstes, weil du da über ``itertools.count`` iterierst anstatt ``while`` zu nutzen.
lg
-
- User
- Beiträge: 31
- Registriert: Samstag 8. April 2006, 17:10
- Wohnort: lachen (schweiz)
Zuerst mal: Danke für die vielen Antworten
Aber wie muss ich das noch ändern, damit es in die txt noch etwas dazuschreibt?
also:
1.txt
[Das ist linie1: (linie 1 von txt)
das ist linie2: (linie 2 von txt)
das ist linie3: (linie 3 von txt)]
2.txt
[das ist linie1: (linie 4 von txt)
das ist linie2: (linie 5 von txt)
das ist linie3: (linie 6 von txt)]
u.s.w.
das linie1, linie2 und linie3 muss sich aber nicht ändern.
Sorry das ich noch so viele Nachfragen stellen muss, aber dies überschreitet meine Fähigkeiten in Python.
Code: Alles auswählen
linecounter = 0
outcounter = 0
out = None
for line in open("in.txt"):
if linecounter % 3 == 0:
try:
out.close()
except:
pass
out = open("out%d.txt" % outcounter, "w")
outcounter += 1
out.write("""das ist linie 1: "+line1
"""das ist linie 2: "+line2
"""das ist linie 3: "+line3""")
linecounter += 1
try:
out.close
except:
pass
Aber wie muss ich das noch ändern, damit es in die txt noch etwas dazuschreibt?
also:
1.txt
[Das ist linie1: (linie 1 von txt)
das ist linie2: (linie 2 von txt)
das ist linie3: (linie 3 von txt)]
2.txt
[das ist linie1: (linie 4 von txt)
das ist linie2: (linie 5 von txt)
das ist linie3: (linie 6 von txt)]
u.s.w.
das linie1, linie2 und linie3 muss sich aber nicht ändern.
Sorry das ich noch so viele Nachfragen stellen muss, aber dies überschreitet meine Fähigkeiten in Python.
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
Sorry, das ich nachfragen muss: Aber was genau willst Du jetzt noch dazu schreiben? Die eckigen Klammern?
Ist jetzt nicht böse, ich verstehe es wirklich nicht.
Bernhard
Edit: Willst Du eine Zeile einfügen, in der die Nummer des txt-Files steht? Also Dein "1. txt", "2. txt", ... ? Diese Information steckt in der Variable outcounter, die jeweils in Zeile 12 hochgezählt wird.
Den Inhalt ausgeben kannst Du, indem Du die Ausgabe in den Zeilen 13 bis 15 anpasst. Zum Beispiel so:
War es das, was Du meintest?
Ist jetzt nicht böse, ich verstehe es wirklich nicht.
Bernhard
Edit: Willst Du eine Zeile einfügen, in der die Nummer des txt-Files steht? Also Dein "1. txt", "2. txt", ... ? Diese Information steckt in der Variable outcounter, die jeweils in Zeile 12 hochgezählt wird.
Den Inhalt ausgeben kannst Du, indem Du die Ausgabe in den Zeilen 13 bis 15 anpasst. Zum Beispiel so:
Code: Alles auswählen
out.write( str(outcounter+1) + ". txt\ndas ist linie 1: "+line1+
"\ndas ist linie 2: "+line2+
"\ndas ist linie 3: "+line3 )
Ich möchte gerne anmerken, dass man `line` nicht mit `linie` sondern `Zeile` übersetzt. Sieht ja schrecklich aus…
-
- User
- Beiträge: 31
- Registriert: Samstag 8. April 2006, 17:10
- Wohnort: lachen (schweiz)
Wenn das die txt ist:
sollen die txt am schluss so aussehen:
1.txt
2.txt
Bei euren Forschlag werden die 3 Zeilen ja in der Variablen "line" gespeichert oder ?
ich muss aber die drei zeilen in verschiedene teile der txt hineinschreiben.
die stadart txt muss so aussehen:
und dann jeweils immer am Ende der zeile in den neuen txts die nächste zeile der ausgangs txt zu schreiben.
Edit (Leonidas): Code-Highlighting abgeschaltet. Wow, das erste mal.
Code: Alles auswählen
hallo
wie
geht
es
dir
heute
1.txt
Code: Alles auswählen
das ist zeile 1:hallo
das ist zeile 2: wie
das ist zeile 3: geht
Code: Alles auswählen
das ist zeile 1: es
das ist zeile 2: die
das ist zeile 3: heute
ich muss aber die drei zeilen in verschiedene teile der txt hineinschreiben.
die stadart txt muss so aussehen:
Code: Alles auswählen
das ist zeile 1:
das ist zeile 2:
das ist zeile 3:
Edit (Leonidas): Code-Highlighting abgeschaltet. Wow, das erste mal.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich hätte das anzubieten:
(Achtung, das produziert relativ viel IO, weil es die Datei immer für eine Zeile öffnet, ist aber vergleichsweise flexibel, weil es mit beliebig langen Input und beliebig langen Templates zurecht kommt. Tuning bleibt dem Leser überlassen)
Code: Alles auswählen
#!/usr/bin/env python
#! -*- coding: UTF-8 -*-
from __future__ import with_statement
from contextlib import closing
def main():
template = file('template.txt', 'r')
templatelines = [line.strip() for line in template.readlines()]
template.close()
filecounter = 1
with closing(file('input.txt', 'r')) as f_in:
for number, line in enumerate(f_in):
f_out = file('%s.txt' % filecounter, 'a')
template_current = number % len(templatelines)
f_out.write(templatelines[template_current])
f_out.write(line)
f_out.close()
if template_current == len(templatelines) - 1:
filecounter += 1
if __name__ == '__main__':
main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
@lukasmarti:
Die Textzeilen stecken nicht in einer Variablen line, sondern in den drei Variablen line1, line2 und line3. Was ich glaube, was Du gerne möchtest, das tut das Script jetzt schon. Die Texte in den Anführungszeichen ("das ist linie 1", etc.) werden vor den jeweiligen Textzeilen ausgegeben!?
(Leonidas' Lösung macht das über ein eigenes File template.txt, in dem er die Zusätze getrennt von der Programmlogik unterbringt.)
Gruß,
Bernhard
Die Textzeilen stecken nicht in einer Variablen line, sondern in den drei Variablen line1, line2 und line3. Was ich glaube, was Du gerne möchtest, das tut das Script jetzt schon. Die Texte in den Anführungszeichen ("das ist linie 1", etc.) werden vor den jeweiligen Textzeilen ausgegeben!?
(Leonidas' Lösung macht das über ein eigenes File template.txt, in dem er die Zusätze getrennt von der Programmlogik unterbringt.)
Gruß,
Bernhard