Python Datei auf Server lesen und verarbeiten

hemorieder

Lieutenant
Registriert
März 2003
Beiträge
652
Hey,

ich will das mein Pi2 ein Pyhton Skript per Cronjob ausführt.
Es geht darum, dass ich feststellen will, wie bestimmte Werte in einer Textdatei sind.

Die Datei liegt auf meinem Server und ist so strukturiert.

Ort/Name: http://www.meinserver.de/switch.txt

Inhalt:
Code:
a#0
b#0
c#0

Der Wert hinter der # kann 0 oder 1 sein. (die # könnte ich natürlich auch tauschen)

Nun will ich das je Wert etwas geschieht, ich versuche es mal in Psyeudo Code.

Code:
if(a=0){tue dies oder das}
if(a=1){tue dies oder das}
if(b=0){tue dies oder das}
if(b=1){tue dies oder das}
if(c=0){tue dies oder das}
if(c=1){tue dies oder das}

also irgendwie stell ich es mit nicht so schwer vor, ich habe allerdings null Plan von Pyhton und was der Raspberry kann.
Nach dem googlen konnte ich zwar feststellen wie man in etwa eine Datei liest, aber nicht wie sich die Tatsache auswirkt das die Datei auf einem Server liegt.


Könnte ihr mir helfen?

lg :)
 
Von was hast du Plan? Hast du schon mal programmiert? Schon mal Python programmiert?

Eine Datei via http runterladen (wird eher nicht geöffnet wie eine Datei) ist sehr einfach mit dem PyPi Modul requests https://pypi.python.org/pypi/requests/
Wenn du nix extra installieren willst gibts urllib. Siehe in der großen Python Hilfedatei unter Python » 3.4.2 Documentation » Python HOWTOs » HOWTO Fetch Internet Resources Using The urllib Package
 
Bitte beachte den Unterschied:

a=0 <- Wertzuweisung von 0 auf Variable a
und
a==0 <- Wertevergleich ob die Variable a den Wert 0 hat

;)
 
das ist mir schon bewusst, daher hab ich auch pseudo code drüber geschrieben :)
 
hemorieder schrieb:
[...] PHP beherrsche ich im groben ;)
Diese Anfragen riechen immer so etwas nach "ich will, dass jemand anderes meine Probleme löst.
Also entweder man kniet sich rein, und die dann auftauchenden Fragen werden sicher auch gerne beantwortet. Oder man lässt es und überträgt die Aufgabe jemanden, der sich damit auskennt.

Aber so Fragen von dem Typ "Hilfe. Ich kenn mich nicht aus. Macht was." sind dann doch ziemlich nervig.
 
Da gebe ich dir natürlich in gewisser Form
Recht, allerdings ist es auch eine Frage das Umfangs.
Das kann ich da natürlich nicht überblicken, wenn mich aber jemand diese Frage in PHP stellen würde, wären die 6 Zeilen nicht so dramatisch für mich , wenn ich damit wirklich jemanden helfen kann.

Aber dies muss natürlich jeder für sich selbst wissen.

Danke für eure Hinweise.
 
Nicht schön, aber sollte funktionieren und benötigt keine weiteren Bibliotheken. Natürlich kannst du es mit einer geeigneten Bibliothek deutlich schöner umsetzen, sodass du die Datei nicht jedes mal auf die microSD-Karte schreiben musst und dann wieder löschen. Zumindest eine Idee davon, wie es aussehen könnte, sollte dir der Code geben.

Code:
import urllib.request

datei = "switch.txt"
urllib.request.urlretrieve("http://www.meinserver.de/switch.txt", datei)
with open(datei) as txtfile:
    for line in txtfile:
        vars = line.split("#")
        # dein ganzer if-kram; vars[0] ist "a", "b" oder "c"; vars[1] ist "0" oder "1"
os.remove(datei)
 
Wow, vielen Dank :)

Ich hab das jetzt mal als switch.py gespeichert auf dem raspberry.

Code:
#!/usr/bin/python
import sys
import urllib.request

datei = "switch.txt"
urllib.request.urlretrieve("http://www.server.de/pi/switch.txt", datei)
with open(datei) as txtfile:
    for line in txtfile:
        vars = line.split("#")
        if vars[0] == 0:
        print "a ist 0"
        print var
        
       if vars[0] == 1:
       print "a ist 1"
       print var

      else:
      print "irgendwas ist falsch"
      print var
os.remove(datei)

wenn ich ausführe kommt:

Code:
File "./switch.py", line 11
    print "a ist 0"
        ^
IndentationError: expected an indented block
 
Zuletzt bearbeitet:
Das ist etwas, was du in 5 Sekunden mit Google herausfinden kannst:

Code:
        if vars[0] == 0:
        print "a ist 0"
        print var

Code:
        if vars[0] == 0:
             print "a ist 0"
             print var
 
Zuletzt bearbeitet:
nun kommt

Code:
Traceback (most recent call last):
  File "./switch.py", line 3, in <module>
    import urllib.request
ImportError: No module named request

wenn ich

apt-get install python-requests

ausführe , kommt das es schon installiert ist
 
Zuletzt bearbeitet:
Moin,

du benutzt Python 2. Der Code, den ich geschrieben habe, ist für Python 3 gedacht. Wenn Python 3 bei dir schon installiert ist, dann musst du einfach in Zeile 1 den Code zu „#!/usr/bin/python3” ändern. Ansonsten erst mit „apt install python3” installieren, du kannst den Code aber auch umschreiben, sodass er auf Python 2 läuft. Falls du Python 3 benutzen willst, musst du bei deinen Print-Anweisungen „print(...)” anstelle von „print ...” nutzen.

Davon abgesehen hast du in deiner Logik jetzt nur die Unterscheidung, ob in einer Zeile der Wert 0 oder 1 steht, aber nicht, ob a, b oder c dort steht.
 
Danke wieder einmal für deine Hilfreiche Antwort.
Jetzt funktioniert es natürlich ;)

nur klappt scheinbar nicht der vergleich, wenn ich mir var[1] ausgebe steht da auch eine 1, dennoch springt er nicht in das if, und sagt : a ist 1

natürlich hab ich den vergleich angepasst, und frage nach vars[1]

also so:

Code:
if vars[1] == 0:
print("a ist 0")

printe ich vars[1] steht aber eine 0 drin, oder 1.
 
Zuletzt bearbeitet:
Code:
        if vars[1] == "0":
             print("a ist 0")
        if vars[1] == "1":
             print("a ist 1")
        else:
             print("error")

ändert leider nix, es ist immer "error"
 
Er gibt nur „error” aus? Wenn in deinem Code vars[1] == "0" ist, dann würde die Ausgabe „a ist 0” und danach „error” lauten. Du solltest auf jeden Fall in Zeile 3 nicht „if”, sondern „elif” schreiben.

Das ist dein Code und der spuckt „error” aus?
Code:
#!/usr/bin/python3
import os
import urllib.request
 
datei = "switch.txt"
urllib.request.urlretrieve("http://www.server.de/pi/switch.txt", datei)
with open(datei) as txtfile:
    for line in txtfile:
        vars = line.strip().split("#")
        if vars[1] == "0":
            print("a ist 0")
        elif vars[1] == "1":
            print("a ist 1")
        else:
            print("error")
os.remove(datei)

Edit:
Tut mir leid, war mein Fehler. Der Code über dem Edit funktioniert jetzt. Hatte die Newline vergessen. :D
 
Zuletzt bearbeitet:
Das ist der Code:

Code:
#!/usr/bin/python3
import os
import sys
import urllib.request

datei = "switch.txt"
urllib.request.urlretrieve("http://www.server.de/pi/switch.txt", datei)
with open(datei) as txtfile:
    for line in txtfile:
        vars = line.split("#")
        if vars[1] == "0":
             print("a ist 0")
        if vars[1] == "1":
             print("a ist 1")
        else:
             print("error")
os.remove(datei)

so gibt er zur Zeit

error
error
error

aus.

Prüfe ich die Variabel individuell steht entweder 1 oder 0 dort.
es muss also am if liegen
 
Alternativ könntest du theoretisch auch die strings in integers umwandeln nachdem du .split verwendest.

Code:
        if int(vars[1]) == 0:
             print("a ist 0")

Finde ich persönlich leserlicher aber kann sein, dass es nur eine dumme Angewohnheit von mir ist.
 
Zurück
Oben