Unterschied write() und 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
JeanCantos
User
Beiträge: 25
Registriert: Sonntag 26. November 2006, 17:08

Samstag 3. März 2007, 16:01

Hallo zusammen,

habe wieder etwas Zeit gefunden, mich in der Pythonprogrammierung zu üben und stoße direkt auf Verständnisprobleme.

Ich versuche mich gerade daran, den Umgang mit Textdateien zu üben. Aber irgendwie bringt mich die Pythonhilfe nicht weiter. Dort steht:
write( str)

Write a string to the file. There is no return value. Due to buffering, the string may not actually show up in the file until the flush() or close() method is called.

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.)
Irgendwie ist mir der Unterschied dieser beiden MEthoden immer noch nicht klar, da ich nicht genau verstehe, was der Unterschied zwischen einem String und einer Sequenz sein soll.

Ferner klappt auch folgender Code nicht:

Code: Alles auswählen

import os
f = file('D:\Test.txt','w')

for i in range(1,10):
    f.writelines('Das ist die ', i , '.Zeile\n')
Wo liegen meine Anfängerfehler?

Gruß,

Jean[/code]
BlackJack

Samstag 3. März 2007, 16:29

`writelines()` ewartet *ein* Argument und Du übergibst *drei*. Genau das verrät Dir aber auch der Text in der Ausnahme.

Und dieses eine Objekt muss "iterable" sein und Zeichenketten liefern. Typischerweise eine Liste von Zeichenketten. Steht so in der Doku. Als Gegenstück zu `readlines()`, das eine Liste von Zeichenketten liefert.

Code: Alles auswählen

In [47]: sys.stdout.writelines(['hallo\n', 'welt\n'])
hallo
welt

In [48]: sys.stdout.writelines(s.upper() for s in ['hallo\n', 'welt\n'])
HALLO
WELT
`write()` schreibt nur eine einzelne Zeichenkette.
JeanCantos
User
Beiträge: 25
Registriert: Sonntag 26. November 2006, 17:08

Montag 5. März 2007, 19:40

Hi BlackJack,

vielen Dank für deine Antwort. Habe meinen Fehler nun erkannt.

Gruß,

Jean
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 5. März 2007, 19:58

<ot>
Und dieses eine Objekt muss "iterable" sein
Kann man irgentwie testen, ob es das auch ist?
</ot>

MfG EnTeQuAk
BlackJack

Montag 5. März 2007, 20:12

`iter(obj)` sollte eine Ausnahme auslösen wenn `obj` nicht "iterable" ist. Aber genau das gleiche passiert auch wenn man es einfach benutzt ohne zu testen.
Antworten