Tempfile

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
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

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

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.
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

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.
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. ;-)
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

...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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Was spricht gegen `tempfile.TemporaryFile(mode="w+", encoding="utf-8")`? Dann kann man auch Strings in diese Textdatei schreiben.

Stefan
Zuletzt geändert von sma am Samstag 20. November 2010, 11:44, insgesamt 1-mal geändert.
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

Da spricht nichts dagegen =)
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

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
lunar

@ravenheart: Wohl dem, der verstanden hat, dass Objektorientierung per se genau gar nichts zu tun hat mit "public", "protected" und "private" ...
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@ravenheart Wenn du wissen willst was objektorientiert ist schau dir Self oder Smalltalk an.
Antworten