[Python-de] urllib2 und tarfile

Diez Roggisch deets at web.de
Mo Mär 11 18:12:41 CET 2013


On 3/11/13 5:37 PM, "Olе Streicher" <ole-usenet-spam at gmx.net> wrote:

>Christian Heimes <christian at python.org> writes:
>> Am 11.03.2013 15:15, schrieb Olе Streicher:
>> An manchen Stellen erwartet die Dokumentation, dass der Entwickler die
>> gewisse Grundlagen mitbringt und/oder die Dokumentation zu
>> tarfile.open() vollständig liest. ;)
>
>Das würde ich beides durchaus bejahen.
>
>> Die Dokumentation sagt doch schon, dass das Objekt nur Datei-ähnlich
>> ist. Python versteht darunter, dass ein Objekt eine read() Methode hat
>> und iterierbar ist. Ggf. kommen noch weitere Methoden wie readline() und
>> fileno() hinzu.
>
>Naja, "Datei-ähnlich" meint für mich eben das, was man unter Duck-typing
>versteht: es sieht halt aus wie eine Datei, ist aber keine. So wie eben
>StringIO:
>
>| This module implements a file-like class, StringIO, that [...]

StringIO ist für dich also ein leuchtendes Beispiel korrekten Ducktypings?

Also für mich schmeisst das auch AttributeErrors:

import tempfile
from cStringIO import StringIO

data = "*" * 10000

name = tempfile.mktemp()

file_obj = open(name, "w")
mem_obj = StringIO()

for fo in [file_obj, mem_obj]:
   fo.write(data)
   print fo.name



So viel zu einem besseren Duck-getypten file-like object.

>
>> Es sollte einleuchten, dass ein Datei-ähnliches Objekt intern über
>> Sockets mit dem Server kommuniziert. Jeder mit Grundwissen über BSD
>> Sockets weiß auch, dass unbuffered sockets nicht seek-able sind.
>
>Wie das intern passiert ist eben ... intern. Implementationsabhängig. Ob
>die urllib2 mittels Sockets implementiert wurde oder ob sie temporäre
>Dateien anlegt, ist nicht Bestandteil der API und auch nicht
>dokumentiert. Klar kann ich als Programmierer auch raten, aber wirklich
>sauber ist das nicht.

Was wäre denn sauber? Das hier zB?

 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html

Man beachte die prosaisch deklarierte Tatsache, dass ausser read()
eigentlich alles verhandelbar ist.

Da wirst du dann auch raten müssen.

Diez









Mehr Informationen über die Mailingliste python-de