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).
Serverliste importieren und abarbeiten
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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 !
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 !
- 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:
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:
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
Code: Alles auswählen
xy, user@192.168.0.1
xy, ich@du.de
yz, user@192.168.0.1
yz, sonst was
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()
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hm... naja, muss ja Dein Ausbilder wissen. Ich würde dann ja Python "vergessen" und mich sofort intensiv mit den obigen Sprachen befassen.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.
Dass Dein Ausbilder JSON wohl nicht kennt ist natürlich nen Armutszeugnis
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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.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
@alle: Kann der Fall überhaupt auftreten, an dem das File-Objekt geöffnet wurde, aber ein IOError geworfen wurde?
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 )und 2. wollt ich defaultdict importieren aber er findet es nicht
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!']}
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja, das ist ein Auszug aus einer IPython-Sitzung.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 ?
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.
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 ?
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 ?
- 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``.
Es gibt kein ``os.join`` (Das gilt auch fuer aktuelle Python Versionen)
Entweder meinst du ``os.path.join`` oder die String Methode ``join``.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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
*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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja, sorry, war mein Fehler.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 ?
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"])
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein, aber ich leiste gerne Hilfe zur Selbsthilfe.morytox hat geschrieben:kannst du bitte ein anwendungsbeispiel für beides geben ?
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
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Erst einmal sind es nicht "unsere" und die sind auch nicht komisch!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
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
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"]))
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'
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 ...
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.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ich wuerde sagen, dass er die Dokumentation nicht gelesen hat. Besonders den Abschnitt:Leonidas hat geschrieben:Was heißt "genügend"?
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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann lies es doch in der Doku nach... oder analysiere meine Beispiele! Man muss dem eben Strings (oder Unicode) übergeben...morytox hat geschrieben:os.path.join stellt mir keine mischung aus variablen und strings passend zusammen ...
kp was der brauch ...
Hast Du es denn mal in ner Shell ausprobiert? (Vielleicht bekomme ich ja mal auf die Frage eine Antwort)
Ich habe noch nir gehört, das "".join() etwas "weglässt"unddas join hat mir auch nicht alles zusammengefügt...
Wieso nutzt Du nicht das csv-Modul? Hatte ich Dir nicht dazu sogar nen Snippet gepostet?ich habe eine zeile drin die mir eine csv datei auseinandernimmt:
stage, server, pfadweb = line.split(';')