#-*- coding: utf-8 -*-
u"""Różnorodne użyteczne funkcje
Ten program jest częścią książki "Zanurkuj w Pythonie", podręcznika
o Pythonie dla doświadczonych programistów. Najnowszą wersję można
znaleźć tu: http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie.
Program ten został oparty na przykładach zawartych w książce
"Dive Into Python", a dostępnej stąd: http://www.diveintopython.org.
"""
__author__ = "Mark Pilgrim (mark@diveintopython.org)"
__version__ = "$Revision: 1.3 $"
__date__ = "$Date: 2004/05/05 21:57:20 $"
__copyright__ = "Copyright (c) 2001 Mark Pilgrim"
__license__ = "Python"
def openAnything(source):
u"""URI, nazwa pliku lub łańcuch znaków --> strumień
Funkcja ta pozwala zdefiniować parser, który przyjmuje dowolne źródło wejścia
(URL, ścieżkę do lokalnego pliku lub znajdującego się gdzieś w sieci,
czy też bieżące dane w postaci łańcucha znaków)
i traktuje je w odpowiedni sposób. Zwracany obiekt będzie zawierał
wszystkie podstawowe metody odczytu (read, readline, readlines).
Kiedy już obiekt nie będzie potrzebny, należy go
zamknąć za pomocą metody .close().
Przykłady:
>>> from xml.dom import minidom
>>> sock = openAnything("http://localhost/kant.xml")
>>> doc = minidom.parse(sock)
>>> sock.close()
>>> sock = openAnything("c:\\inetpub\\wwwroot\\kant.xml")
>>> doc = minidom.parse(sock)
>>> sock.close()
>>> sock = openAnything("<ref id='conjunction'><text>and</text><text>or</text></ref>")
>>> doc = minidom.parse(sock)
>>> sock.close()
"""
if hasattr(source, "read"):
return source
if source == "-":
import sys
return sys.stdin
# próbuje otworzyć za pomocą modułu urllib (gdy source jest plikiem dostępnym z http, ftp lub URL-a)
import urllib
try:
return urllib.urlopen(source)
except (IOError, OSError):
pass
# próbuje otworzyć za pomocą wbudowanej funkcji open (jeśli source jest ścieżką do lokalnego pliku)
try:
return open(source)
except (IOError, OSError):
pass
# traktuje source jako łańcuch znaków
import StringIO
return StringIO.StringIO(str(source))