Serverliste importieren und abarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bitte versuch den Text verstaendlich zu schreiben und zu formattieren.

simplejson gibt es auch als pure Python, das kannst du einfach mit dem Skript verteilen.
Als CSV ist das natuerlich auch moeglich, du musst allerdings erst mal die Datenstruktur wieder herstellen, um einen so konfortablen Algorithmus wie bei Hyperion zu haben.
Die Alternative waere uebrigens 2 Dateien fuer die 2 Gruppen zu benutzen, um das Einlesen zu vereinfachen (Bei JSON braucht man das nicht).
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

installieren des neuen progs ist ungünstig , einfach zu viele server ... und das nur zu übungszwecken ... später soll ich das alles dann in pearl und bash portieren und damit weiterlernen, das ganze ist für mich nur auf python aufgezogen weil ich schon vorwissen mitbringe , nur irgendwann soll ich auf den firmenstandart angepasst werden.

Die einzelnen Elemente trenn ich einfach mit ; da ich dann ja auch datein aus exel importieren kann ... ich probier einfach mal weiter rum jetzt einfach von klein nach groß und wenn ich doch nochmal dringende fragen hab (fr. oder nxt week) schreib ich hier wieder ... müsst ja dann wieder oben sein das topic. Aber trotzdem schonmal ganz vielen dank für die umfangreiche hilfe bisher !
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@Cofi: Naja, da es anscheinend nicht so auf Redundanz ankommt, wäre das Format ja einfach so flach wie ursprünglich vorgestellt:

Code: Alles auswählen

xy, user@192.168.0.1
xy, ich@du.de
yz, user@192.168.0.1
yz, sonst was
Ohne Aussagen zur Anzahl an Jobs und wie die Liste eigentlich erstellt wird, kann man sich da schlecht gegen CSV aussprechen. (Außer dass ich den fehlenden Unicode-Support ätzend finde und deswegen meist nicht auf CSV setze)

ok, man muss das Dict erst mal wieder aufbauen, aber in dem Falle geht das ja halbwegs einfach.

@morytox:
Hier wäre mal ein Ansatz mit CSV:

Code: Alles auswählen

import csv
from collections import defaultdict

stati = ["xy", "yz"]

try:
    jobs = defaultdict(list).fromkeys(stati)
    in_file = open("name", "r")
    for row in csv.reader(in_file):
        if row[0] in stati:
            jobs[row[0]]=row[1:]
except IOError, e:
    print e
else:
    # ab hier sollte es gehen wie gehabt.
finally:
    in_file.close()
Edit: Ich sehe grad, dass ich die Path-Angabe oben nicht berücksichtigt habe. Aber das ist ja einfach nur eine Spalte mehr. Allerdings ist die Struktur eines Jobs nun eine Liste und kein dict mehr. Also aufpassen bei der Parameterübergabe ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:installieren des neuen progs ist ungünstig , einfach zu viele server ... und das nur zu übungszwecken ... später soll ich das alles dann in pearl und bash portieren und damit weiterlernen, das ganze ist für mich nur auf python aufgezogen weil ich schon vorwissen mitbringe , nur irgendwann soll ich auf den firmenstandard angepasst werden.
Hm... naja, muss ja Dein Ausbilder wissen. Ich würde dann ja Python "vergessen" und mich sofort intensiv mit den obigen Sprachen befassen.

Dass Dein Ausbilder JSON wohl nicht kennt ist natürlich nen Armutszeugnis :-D
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

is das auch gängig in der 2.4 er variante ?
1. finally wollte er in dem zusammenhang nicht nehmen --> nachgelesen und es wurde geschrieben dass es erst ab 2.5 in der konstellation geht. sonst gibt es nur try:, exept, else oder try finally

und 2. wollt ich defaultdict importieren aber er findet es nicht
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:is das auch gängig in der 2.4 er variante ?
1. finally wollte er in dem zusammenhang nicht nehmen --> nachgelesen und es wurde geschrieben dass es erst ab 2.5 in der konstellation geht. sonst gibt es nur try:, exept, else oder try finally
Ok, war mir nicht mehr geläufig. Dann musst Du die Fehlerbehandlung eben abändern. Sprich das finally weglassen und das in_file.close() am besten direkt als erstes im else-Zweig ausführen.

@alle: Kann der Fall überhaupt auftreten, an dem das File-Objekt geöffnet wurde, aber ein IOError geworfen wurde?
und 2. wollt ich defaultdict importieren aber er findet es nicht
Mist, auch da hab ich übersehen, dass es das erst ab 2.5 gibt. (Aber Du siehst schon, wie unbequem es ist, mit alten Versionen zu entwickeln ;-) )

Dann musst Du das Dict eben so initialisieren:

Code: Alles auswählen

In [3]: keys = ["foo", "bar"]

In [4]: jobs = {}.fromkeys(keys)

In [5]: jobs
Out[5]: {'bar': None, 'foo': None}

In [10]: for key in jobs.keys():
   ....:     jobs[key] = []
   ....:

In [11]: jobs
Out[11]: {'bar': [], 'foo': []}

In [12]: jobs["bar"].append(13)

In [13]: jobs["foo"].append("geht auch so!")

In [14]: jobs
Out[14]: {'bar': [13], 'foo': ['geht auch so!']}
Das deaultdict erspaart einem eben eine solche Schleife wie in In[10]. Vielleicht geht's auch noch anders / kürzer...
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

den auszug den du mir da grad gegeben hast, was kann ich da rauslesen ? kann mit dem in[x] und out[x] nix anfangen ? Is das ne shellausgabe oder wie ?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:den auszug den du mir da grad gegeben hast, was kann ich da rauslesen ? kann mit dem in[x] und out[x] nix anfangen ? Is das ne shellausgabe oder wie ?
Ja, das ist ein Auszug aus einer IPython-Sitzung.
http://ipython.scipy.org/moin/

Du kannst es aber auch in einer normalen Python-Shell nachstellen. IPython bietet eben nur einige Komfort-Funktionen im Gegensatz zur Standard-Shell.

Ich erwähne Zeile 10 ja sogar explizit! Du musst den Transfer von der Initialisierung per defaultdict zu einem normalen schon selber lesiten ;-) Versuche mein Beispiel einmal in einer Shell nachzuvollziehen und dann schau Dir noch mal mein letztes Snippet genau an. Ich will ja eine Datenstruktur aufbauen, die innerhalb eines Dicts zu jedem Schlüssel eine eigene Liste führt. Genau das geht per defaultdict sehr praktisch und muss wegen Python 2.4 nun so "nachgebaut" werden.
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

wie es aussieht hat es sich jetzt ergeben dass sich meine String und variablenverkettung als nicht sinnvoll erwiesen hat da diese nun nichtmehr als zusammen gehörend erkannt wurden ...
jetzt habe ich den befehl os.join folgendermazen angewandt:
vorher
os.system("string"+var+"string")
jetzt
os.system(os.join(["string", var, "string"])) -->
AttributeError: 'module' object has no attribute 'join'

Ich benutze immernoch die Version 2.4 von Py da mir keine andere möglich ist... Lösungsvorschläge ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Da steht doch dein Problem?
Es gibt kein ``os.join`` (Das gilt auch fuer aktuelle Python Versionen)

Entweder meinst du ``os.path.join`` oder die String Methode ``join``.
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

kannst du bitte ein anwendungsbeispiel für beides geben ? auf seite 2 Des tepics war darüber schon einmal die rede und da wurde mir das os.join angedreht o.O welches von beiden wurde nun gemeint, was ist für mich am sinnvollsten ?

*edit*

File "deploymentf.py", line 57, in cleanuppng
os.system(os.path.join(["rm -f", pfadex, "/symbole.tgz"]))
TypeError: system() argument 1 must be string, not list
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:kannst du bitte ein anwendungsbeispiel für beides geben ? auf seite 2 Des tepics war darüber schon einmal die rede und da wurde mir das os.join angedreht o.O welches von beiden wurde nun gemeint, was ist für mich am sinnvollsten ?
Ja, sorry, war mein Fehler.

Code: Alles auswählen

# Beispiel für os.path.join()
os.path.join("/home/foo/", "bar/", "file.txt")
# Beispiel für join()
",".join(["Hallo", "Welt"])
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

morytox hat geschrieben:kannst du bitte ein anwendungsbeispiel für beides geben ?
Nein, aber ich leiste gerne Hilfe zur Selbsthilfe.
Library Reference fuer 2.4: http://www.python.org/doc/2.4.4/lib/lib.html
``os.path``: http://www.python.org/doc/2.4.4/lib/module-os.path.html
String Methoden: http://www.python.org/doc/2.4.4/lib/string-methods.html
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

von euren komischen join befehlen klappt keiner genügend ... also pfeif ich drauf und mach wieder alles in einer schönen einfachen + verbindung ... -.-* kein bock mehr
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was heißt "genügend"?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:von euren komischen join befehlen klappt keiner genügend ... also pfeif ich drauf und mach wieder alles in einer schönen einfachen + verbindung ... -.-* kein bock mehr
Erst einmal sind es nicht "unsere" und die sind auch nicht komisch!

Hast Du mein Beispiel mal in einer Shell ausprobiert? (Für das os.path.join musst Du natürlich noch das os.path-Modul importieren)

Hast Du überhaupt schon einmal solche Kleinigkeiten in einer Shell ausgetestet?

Diese Fehlermeldung sollte nicht so schwer zu deuten sein:

Code: Alles auswählen

File "deploymentf.py", line 57, in cleanuppng
os.system(os.path.join(["rm -f", pfadex, "/symbole.tgz"]))
TypeError: system() argument 1 must be string, not list
system() erwartet einen String, Du hast aber durch eine falsche Benutzung von os.path.join eine LIste generiert

Du müßtest dort also einen String einsetzen...

os.path.join() setzt einen Pfad zusammen! Ich weiß ja nicht was in pfadex drin steht, aber wenn es bereits fertige Pfade sind, musst Du hier natürlich nur "".join() nutzen:

Code: Alles auswählen

os.system(" ".join(["rm -f", " ".join(pfadex), "/symbole.tgz"]))
Also z.B. so:

Code: Alles auswählen

In [10]: pfadex = ["/foo", "/bar"]

In [11]: " ".join(["rm -f", " ".join(pfadex), "/symbole.tgz"])
Out[11]: 'rm -f /foo bar /symbole.tgz'
So, was ist daran nun so schwer bzw. mit ein bischen Eigeninitiative nicht zu schaffen?
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

os.path.join stellt mir keine mischung aus variablen und strings passend zusammen ...
kp was der brauch ...
unddas join hat mir auch nicht alles zusammengefügt...

ich vermute aber grad dass der fehler vllt sogar wo anders liegt ...

ich habe eine zeile drin die mir eine csv datei auseinandernimmt:

stage, server, pfadweb = line.split(';')

jedoch bekomm ich das letzte argument nur mit nem backspace am ende ...
das heißt wenn er die variable einsetzt setzt er mir dannach nen enter und der rest des pfades wird seperiert ... wie kann ich dieses enter ausschließen ?

*edit* PS: der letzte post war vllt nen bissel unfreundlich , dafür entschuldige ich mich ... bin nur n bissel unzufrieden weil es letzte woche noch funktioniert hat ...
Zuletzt geändert von morytox am Montag 21. September 2009, 13:30, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Leonidas hat geschrieben:Was heißt "genügend"?
Ich wuerde sagen, dass er die Dokumentation nicht gelesen hat. Besonders den Abschnitt:
os.path.join Dokumentation hat geschrieben:If any component is an absolute path, all previous components (on Windows, including the previous drive letter, if there was one) are thrown away, and joining continues.
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

und gerade da ist mein prob: ich brauch nicht einen Pfad: ich setzte eine Zeile zusammen die einer geschriebenen Zeile in der Shell entspricht, DH. befehle sowie pfade , zusammengesetzt aus strings und variablen...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

morytox hat geschrieben:os.path.join stellt mir keine mischung aus variablen und strings passend zusammen ...
kp was der brauch ...
Dann lies es doch in der Doku nach... :roll: oder analysiere meine Beispiele! Man muss dem eben Strings (oder Unicode) übergeben...

Hast Du es denn mal in ner Shell ausprobiert? (Vielleicht bekomme ich ja mal auf die Frage eine Antwort)
unddas join hat mir auch nicht alles zusammengefügt...
Ich habe noch nir gehört, das "".join() etwas "weglässt" ;-)
ich habe eine zeile drin die mir eine csv datei auseinandernimmt:

stage, server, pfadweb = line.split(';')
Wieso nutzt Du nicht das csv-Modul? Hatte ich Dir nicht dazu sogar nen Snippet gepostet?
Antworten