Seite 1 von 1

URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 07:54
von tadeus
Hallo,

ich habe eine Url mit einer Textdatei, welche folgenden Inhalt hat

Code: Alles auswählen

2013-09-27_10:27 , 2013-09-27_16:26 , IrgendEinVerwendungszweck
2013-09-24_17:25 , 2013-09-24_18:28 , asdf
2013-09-25_18:26 , 2013-09-25_17:27 , asdf
2013-09-30_19:26 , 2013-09-30_19:27 , adf
2013-10-03_01:26 , 2013-10-11_16:17 , asasdf
Diese Textdatei möchte ich Zeile für Zeile durchgehen und gucken ob die aktuelle Zeit zwischen den angegeben Zeiten liegt. Leider scheitere ich schon am Anfang.

Ich weiß zwar, dass man mit folgendem Code die Url holt und in eine Variable einliest.

Code: Alles auswählen

link = "http://url/main.txt"
f = urllib.urlopen(link)
text = f.read()
Aber wie ich dann diese text Variable zeilenweise durchgehe, damit ich die Zeile mit string.split() in seine Einzelteile zerlegen kann, weiß ich nicht.

Wie geht das in python? Oder gibts da ne sauberere Lösung?

Danke vorab

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 08:18
von cofi

Code: Alles auswählen

url = "http://url/main.txt"
with urllib.urlopen(url) as f:
    lines = f.read().split('\n')
for line in lines:
    process_line(line)
oder eben gleich zeilenweise arbeiten:

Code: Alles auswählen

url = "http://url/main.txt"
with urllib.urlopen(url) as f:
    for line in f:
        process_line(line)

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 09:58
von tadeus
Danke schon mal. Das mit dem "with" kannte ich noch nicht.

Code: Alles auswählen

python test2.py
Traceback (most recent call last):
  File "test2.py", line 12, in <module>
    with urllib.urlopen(link) as f:
AttributeError: addinfourl instance has no attribute '__exit__'
Was für ein exit benötige ich da?

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 11:27
von cofi
Entschuldige, `urllib.urlopen` gibt nur ein File-like Objekt zurueck, keinen ganzen Kontextmanager (wie ein "normales" `open` das tut).
In dem Fall hilft `contextlib.closing`, das eine `__exit__` Methode erstellt die `close` aufruft.

Code: Alles auswählen

from contextlib import closing

with closing(urlllib.urlopen(url)) as f:
    ...

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 11:57
von tadeus
Ich hab vorhin eine einfachere Variante gefunden

Code: Alles auswählen

data = urllib.urlopen(link)
lines = data.readlines()
for line in lines: ......
geht doch, man muss nur wissen wie ^^ :)

Danke nochmal

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 12:18
von BlackJack
@tadeus: Einfacher wäre es die zweite Zeile einfach wegzulassen, die ist nicht nötig.

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 12:43
von Hyperion
Und noch einfacher wäre es, das Requests-Modul zu benutzen :-)

Re: URL mit Textdatei aufrufen - zeilenweise lesen

Verfasst: Mittwoch 16. Oktober 2013, 16:10
von cofi
@tadaeus: Das ist effektiv meine 2. Variante in kompliziert und ohne die Ressource zu schliessen.