Seite 1 von 1

Unterschied write() und writelines()

Verfasst: Samstag 3. März 2007, 16:01
von JeanCantos
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]

Verfasst: Samstag 3. März 2007, 16:29
von BlackJack
`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.

Verfasst: Montag 5. März 2007, 19:40
von JeanCantos
Hi BlackJack,

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

Gruß,

Jean

Verfasst: Montag 5. März 2007, 19:58
von EnTeQuAk
<ot>
Und dieses eine Objekt muss "iterable" sein
Kann man irgentwie testen, ob es das auch ist?
</ot>

MfG EnTeQuAk

Verfasst: Montag 5. März 2007, 20:12
von BlackJack
`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.