probleme mit "writelines"

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
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

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 :!:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

...

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.
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

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()
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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)
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

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
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

test1 = "zwei"
test2 = "drei"
teste = "%s\n%s" % (test1, test2)
with open("test.txt","w") as test:
    test.write(teste)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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)])

:wink:
yipyip
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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])
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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ;)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

DANKE-SCHÖN!!!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ah .. gut zu wissen, danke.
Antworten