Seite 1 von 1
Tempfile
Verfasst: Freitag 19. November 2010, 23:49
von ravenheart
Wieso funktioniert das nicht?
Code: Alles auswählen
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import tempfile
>>> tmp = tempfile.TemporaryFile()
>>> tmp.write("Hallo Welt")
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
tmp.write("Hallo Welt")
TypeError: must be bytes or buffer, not str
>>>
In der Doku steht Folgendes:
Code: Alles auswählen
>>> f = NamedTemporaryFile(delete=False)
>>> f
<open file '<fdopen>', mode 'w+b' at 0x384698>
>>> f.name
'/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0'
>>> f.write("Hello World!\n")
>>> f.close()
Auch in einem Buch (Peter Kaiser und Co) steht dass man Strings reinschreiben kann, wenn ich mich nicht irre.
Re: Tempfile
Verfasst: Samstag 20. November 2010, 00:04
von cofi
Dann versuch dich mal am interpretieren der Fehlermeldung. Das will eben ein `bytes` Objekt, kein `str`
Da ist die Python3 Dokumentation aber klar fehlerhaft.
Code: Alles auswählen
Python 3.1.3rc1 (r313rc1:86453, Nov 14 2010, 05:02:14)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> f = tempfile.NamedTemporaryFile(delete=False)
>>> f
<tempfile._TemporaryFileWrapper object at 0x290a310>
>>> f.name
'/tmp/tmpzfSgyv'
>>> f.write(b"hello there\n")
12
Edit: Was das Buch angeht: Behandelt das denn auch Python3? Dem Autornamen nach schliesse ich aber auf Galileo Press .. die Python-Buecher haben dort keine sonderlich gute Qualitaet (siehe Forensuche), also wuerde ich ihnen auch das zutrauen.
Re: Tempfile
Verfasst: Samstag 20. November 2010, 00:59
von ravenheart
Ich finde es nur schade, dass sich Tempfile anders verhält als eine "normale" Datei, da ich die beiden mischen wollte.
Jupp das Buch ist Galileopress und soo schlimm finde ich es nicht.
Für Anfänger ein hübscher Einstieg.
Ansonsten bevorzuge ich eig die O´Reilly Reihe, aber da hab ich zu Python 3 noch nichts gesehen.
Edit:
Ansonsten hab ich eig kein Problem gehabt die Fehlermeldung zu interpretieren, aber der Missstand in der Doku hat mich doch dazu gebracht, das hier mal zu posten.
Re: Tempfile
Verfasst: Samstag 20. November 2010, 10:04
von BlackJack
@ravenheart: Wenn Du beide mischen willst, musst Du dafür sorgen, dass sie sich im Verhalten nicht unterscheiden. Im `codecs`-Modul kommt man an Wrapper-Objekte, also für den Schreibfall hier `getwriter()`.
Wenn die Kritik an einem Buch ist, dass es Anfängern für die Programmiersprache unübliche Idiome vermittelt, dann ist es ziemlich egal was der Anfänger davon hält, er weiss es ja nicht besser, kann es also auch schlecht beurteilen.

Re: Tempfile
Verfasst: Samstag 20. November 2010, 11:23
von ravenheart
...die Python-Buecher haben dort keine sonderlich gute Qualitaet (siehe Forensuche), ...
Ich finde in der SuFu leider keinen Beitrag, welcher "wirklich" die Schwächen des Buches aufweist.
Die ersten 4 Seiten sind Beiträge wie
Ach, du suchst Bücher zum heizen?
Es sollte, wenn ihr schon vom Buch abratet, zumindest ein Thread darüber existieren, zB in den FAQ.
Jetzt interessiert mich aber auch mal die Meinung zu
Python Cookbook
Zum Thema Codecs:
Das werde ich mal anwenden, aber im Grunde ists eh nicht nötig, da ich py2.7 verwende
Re: Tempfile
Verfasst: Samstag 20. November 2010, 11:29
von sma
Was spricht gegen `tempfile.TemporaryFile(mode="w+", encoding="utf-8")`? Dann kann man auch Strings in diese Textdatei schreiben.
Stefan
Re: Tempfile
Verfasst: Samstag 20. November 2010, 11:35
von ravenheart
Da spricht nichts dagegen =)
Re: Tempfile
Verfasst: Samstag 20. November 2010, 14:01
von derdon
Re: Tempfile
Verfasst: Samstag 20. November 2010, 14:36
von ravenheart
O Graus ...
ich muss mal nachsehen ob das in der neuen Auflage immer noch so ist...
Gott sei dank verende ich Python ohnehin nur in Ausnahmefällen objektorientiert.
Wenn ich wieder in Knechtschaft von public, protected und private fallen möchte, schreibe ich c++ oder java
(was für manche zwecke sehr vorteilhaft ist)
Aber das mit der ListeMitDurchschnitt kann wirklich nicht ernst gemeint sein =)
Dazu muss man aber sagen, dass eigentlich jeder, der vorher mal ne andere (objektorientierte) Sprache programmiert hat doch hoffentlich genug
Verstand hat so etwas nicht zu schreiben
Jo dieses Kapitel ist Müll, auch dass man del NICHT mit delete oder free gleichsetzen kann verpennen die total.
Das Kapitel muss ich mir definitiv mal reinziehen =)
Also danke für den Artikel
Re: Tempfile
Verfasst: Samstag 20. November 2010, 16:19
von lunar
@ravenheart: Wohl dem, der verstanden hat, dass Objektorientierung per se genau gar nichts zu tun hat mit "public", "protected" und "private" ...
Re: Tempfile
Verfasst: Samstag 20. November 2010, 16:31
von DasIch
@ravenheart Wenn du wissen willst was objektorientiert ist schau dir Self oder Smalltalk an.