Seite 1 von 1

Dynamische Datei öffnen

Verfasst: Montag 25. September 2006, 11:13
von karlson
Hallo,

ich bin python Anfänger und stehe vor folgendem Problem.
Ich möchte eine Datei aus dem Internet herunterladen. Bei der Datei handelt es sich um die Aufzeichnung eines Regenradars. Die Daten werden alle 10 min. aktualisiert und der Dateiname besteht aus dem aktuellen Zeitstempel
(rm20060925-100154.dat). Somit verändert sich der Dateiname ständig.
Der Beispielcode funktioniert nur solange bis sich der Zeitstempel wieder ändert.
Welche Möglichkeiten bestehen immer die aktuellste Datei zu öffnen ?

Code: Alles auswählen

#!/usr/bin/python
import urllib
req = urllib.urlopen('http://www.xxxxxxxx.de/forschung/gruppen/radar/xx_daten/rm20060925-095646.dat')
f = open('b:/dcx1.csv', 'w')
f.write(req.read())
f.close()
req.close()

Re: Dynamische Datei öffnen

Verfasst: Montag 25. September 2006, 11:59
von gerold
karlson hat geschrieben:Welche Möglichkeiten bestehen immer die aktuellste Datei zu öffnen?
Hi karlson!

Du brauchst den exakten Dateinamen um etwas per HTTP herunterladen zu können. Wie bekommst du den aktuellen Dateinamen angezeigt? Rufe diese HTML-Seite auf und *parse* den aktuellen Dateinamen heraus.

Vielleicht kannst du auf den Ordner ja auch per FTP zugreifen. Dann könntest du die Dateinamen des Ordners abrufen und dann entscheiden, welche Datei du herunterladen möchtest.

- Eine HTML-Datei kannst du z.B. recht einfach mit BeautifulSoup parsen.

- FTP geht mit dem Python-Modul ftplib.

mfg
Gerold
:-)

Verfasst: Montag 25. September 2006, 12:00
von gerold
...und willkommen im Python-Forum! :-)

Verfasst: Montag 25. September 2006, 12:51
von Y0Gi
Wenn du keine zusätzliche Abhängigkeit einbringen willst, kannst du im allgemeinen auch sehr gut über reguläre Ausdrücke (Modul 're' in der Python-Standard-Bibliothek) Teile extrahieren.

Eine andere Option wäre es, den Dateinamen selbst anhand der aktuellen Uhrzeit zu generieren:

Code: Alles auswählen

import datetime

now = datetime.datetime.now()
fname = now.strftime('rm%Y%m%d-%H%M%S.dat')
Dabei muss allerdings auch sichergestellt sein, dass die Uhrzeiten auf beiden Systemen übereinstimmt. Ggf. musst du ein wenig verzögern oder einige Minuten abziehen.

Ich habe übrigens angenommen, dass die letzten sechs Ziffern die Uhrzeit in Stunden, Minuten und Sekunden repräsentieren. Wenn die Datei nicht sekündlich erzeugt wird (und davon gehe ich aus), müsste der Intervall der Erstellung (z.B. einmal pro Minute) einbezogen werden - wenn es denn einen festgelegten gibt.

Verfasst: Dienstag 26. September 2006, 07:42
von karlson
Danke für die Hilfe.