Seite 1 von 1
probleme mit "writelines"
Verfasst: Sonntag 8. März 2009, 13:39
von krisi12345
Hi
Ich hab ein paar Probleme mit writelines
So weit Ich weis kann damit mehrere Zeilen in eine Datei schreiben.
Das bekomme Ich aber nicht hin.
HILFE

Verfasst: Sonntag 8. März 2009, 13:46
von cofi
...
Selbst meine Kristallkugel beschwert sich schon über den Post.
Python Library Reference hat geschrieben:file.writelines(sequence)
Write a sequence of strings to the file. The sequence can be any iterable object producing strings, typically a list of strings. There is no return value. (The name is intended to match readlines(); writelines() does not add line separators.)
Wenn das nicht hilft, solltest du uns mal dein Problem erklären .. oder zumindest erst mal nennen.
Verfasst: Sonntag 8. März 2009, 13:51
von krisi12345
Wie sorgt man dafür dass "test1" oder 2 in die nächste Zeile der Datei geschrieben wird?
Code: Alles auswählen
test1 = "zwei"
test2 = "drei"
teste = test1 + test2
test = open("test.txt","w")
test.writelines(teste)
test.close()
Verfasst: Sonntag 8. März 2009, 14:06
von cofi
file.writelines erwartet eine Sequenz, d.h. Tuple, Liste und Konsorten.
Du hast nichts anderes als einen String -> file.write
Code: Alles auswählen
test1 = "zwei"
test2 = "drei"
teste = "%s%s" % (test1, test2)
with open("test.txt","w") as test:
test.write(teste)
Verfasst: Sonntag 8. März 2009, 14:15
von krisi12345
Code: Alles auswählen
test1 = "zwei"
test2 = "drei"
teste = "%s%s" % (test1, test2)
with open("test.txt","w") as test:
test.write(teste)
=zweidrei
Es soll aber
zwei und
drei in die nächste zeile sein
Also keine Große Hilfe
Verfasst: Sonntag 8. März 2009, 14:18
von nemomuk
Code: Alles auswählen
test1 = "zwei"
test2 = "drei"
teste = "%s\n%s" % (test1, test2)
with open("test.txt","w") as test:
test.write(teste)
Verfasst: Sonntag 8. März 2009, 14:20
von yipyip
Natürlich hast Du recht, dass man bei
"writelines()" einen Zeilenseparator erwarten könnte.
Die Doku (und Deine eigenen Erfahrungen) sagen aber,
dass dies nicht der Fall ist.
Also must Du selber einen einsetzen:
Code: Alles auswählen
from __future__ import with_statement
with open('hu', 'w') as fp:
fp.writelines([('%s' % i) * i + '\n' for i in range(1, 6)])
yipyip
Verfasst: Sonntag 8. März 2009, 14:21
von cofi
Du weisst schon, dass du mit der Verkettung von test1 und test 2 nur einen String erzeugst?
Ich glaube du solltest mal das Tutorial durcharbeiten.
Code: Alles auswählen
import os
test1 = "zwei%s" % os.linesep
test2 = "drei%s" % os.linesep
with open("test.txt","w") as test:
test.writelines([test1, test2])
Verfasst: Sonntag 8. März 2009, 14:50
von BlackJack
@cofi: Wenn Du `os.linesep` benutzt, musst Du auch Textdateien als Binärdateien öffnen, sonst macht Windows da zum Beispiel Murks, weil in `os.linesep` dort das Zeilenende-Zeichen '\n' selbst enthalten ist.
Verfasst: Sonntag 8. März 2009, 15:02
von cofi
Da ich grad kein Windows greifbar hab (und keine Klimbzüge mit Wine machen will): Wie unterscheidet sich das denn von einem manuellen "\r\n" ? os.linesep ist schliesslich ein schlichter String oO
Wobei es mich aber nicht wirklich überrascht, dass Windows querschiesst

Verfasst: Sonntag 8. März 2009, 15:08
von Trundle
Wenn du die Datei nicht im Binärmodus öffnest, werden '\n' von der libc durch `os.linesep` ersetzt. Unter Windows übergibst du '\r\n'. Jetzt wird aber das '\n' ersetzt, also kommt am Ende '\r\r\n' heraus.
Verfasst: Sonntag 8. März 2009, 15:12
von krisi12345
DANKE-SCHÖN!!!
Verfasst: Sonntag 8. März 2009, 15:16
von cofi
Ah .. gut zu wissen, danke.