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

probleme mit "writelines"

Beitragvon krisi12345 » Sonntag 8. März 2009, 13:39

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 8. März 2009, 13:46

...

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:

Beitragvon krisi12345 » Sonntag 8. März 2009, 13:51

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 8. März 2009, 14:06

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:

Beitragvon krisi12345 » Sonntag 8. März 2009, 14:15

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

Beitragvon nemomuk » Sonntag 8. März 2009, 14:18

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

Beitragvon yipyip » Sonntag 8. März 2009, 14:20

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 8. März 2009, 14:21

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

Beitragvon BlackJack » Sonntag 8. März 2009, 14:50

@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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 8. März 2009, 15:02

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

Beitragvon Trundle » Sonntag 8. März 2009, 15:08

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:

Beitragvon krisi12345 » Sonntag 8. März 2009, 15:12

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

Beitragvon cofi » Sonntag 8. März 2009, 15:16

Ah .. gut zu wissen, danke.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder