Seite 1 von 1
Werte aus .ini - Datei auslesen
Verfasst: Dienstag 1. Juli 2008, 10:37
von Daniela
Hallo alle miteinander,
ich bräuchte mal einen Hinweis wie ich aus einer .ini-Datei einen bestimmten Wert auslesen kann.
Ich hab auch schon im Forum nach diesem oder einen ähnlichen Problem gesucht, aber nichts passendes gefunden.
Also die ini-Datei sieht ungefähr so aus:
Code: Alles auswählen
// ----------------------------------------------------------------------
// viel Text
// ----------------------------------------------------------------------
[Geom]
// Length of the platform in [mm]
PltfLength = 705
// Width of the platform in [mm]
PltfWidth = 600
// Distance of the wheels in [mm]
DistWheels = 500
// Distance of the platform center to the wheel axis in [mm]
DistPltfCenterToWheelAxis = 140.5
// Height of the scan plain [mm]
HeightScanPlain = 342
...
Jetzt benötige ich z.B. die Werte für die PltfWidth oder die PltfLength, wie kann ich es beweerkstelligen, dass mir diese Werte übergeben werden damit ich sie in meinem Python-Skript nutzen kann?
Vielen Dank für eure Hilfe schon mal im Vorraus.
Daniela
Verfasst: Dienstag 1. Juli 2008, 10:59
von Redprince
Sieh dir doch einmal [mod]ConfigParser[/mod] an!

Verfasst: Dienstag 1. Juli 2008, 11:22
von Daniela
Danke, werd ich mir mal anschauen.
Verfasst: Dienstag 1. Juli 2008, 11:52
von dor_neue
http://paste.pocoo.org/show/78252/
hatte mir vor nen paar Tagen das hier gebastelt gehabt - keine Garantie auf Richtigkeit - aber bei mir funzt es ohne Probs...
Vielleicht bekommste ja nen paar Anregungen...
PS: Der Aufruf in Deinem Fall wäre z.B.
http://paste.pocoo.org/show/78251/
PS: PEP8 nicht beachtet - kannte ich noch nicht als ich das geschrieben habe...

Wird aber ab jetzt besser...
Verfasst: Dienstag 1. Juli 2008, 12:20
von Daniela

Boah, ich bin baff. Danke dor_neue!
Ich werd dein Skript gleich mal ausprobieren.
Ich hatte mich in der Zwischenzeit mal mit dem ConfigParser beschäfftigt, den Redprince vorgeschlagen hatte und da das Beispiel auf der Seite(unten) mal versucht zu übernehmen. Nur bei dem bekomme ich einige Fehermeldungen.
Hier mal das, was ich bisher habe:
Code: Alles auswählen
def get_Abmessung():
config = ConfigParser.RawConfigParser()
config.read("Platform.ini")
# geom ist die Section und PlrfLength/Width die Werte die ich eigentlich haben will.
rob_laenge = config.get("Geom", "PltfLength")
rob_breite = config.get("Geom", "PltfWidth")
print rob_laenge, rob_breite
return rob_laenge, rob_breite
Und das bekomme ich als Fehlermeldung:
Code: Alles auswählen
File "Coordinates.py", line 4, in get_Abmessung
config.read("Platform.ini")
File "C:\Python25\lib\ConfigParser.py", line 267, in read
self._read(fp, filename)
File "C:\Python25\lib\ConfigParser.py", line 462, in _read
raise MissingSectionHeaderError(fpname, lineno, line)
ConfigParser.MissingSectionHeaderError: File contains no section headers.
file: Platform.ini, line: 1
'// ----------------------------------------------------------------------\n'
So wie ich das verstehe, stört sich der Parser gleich an der 1. Zeile der ini-Datei.
Aber diese ist mit der Zeichenkette so vorgegeben und ich kann/will/darf nicht daran was ändern.
Es sind insgesamt 14 solcher Zeilen, die mit " //----------------- " anfangen und zwischendrin ist noch normaler Text. Quasi so eine Art Beschreibung, für was die Datei da ist.
Kann man da noch irgendwas machen, damit man auch so die Werte ausgelesen bekommt?
Ich werd mich jedenfalls mal an die Lösung von dor_neue machen und sehen, wie weit sie mich führt.
Was mich jetzt beim ersten Drüberschauen schon mal interessieren würde, warum beim 2. Skript in Zeile 8
noch dieses "r" steht? Wofür ist das gedacht?
Danke schonmal für eure Hilfen
Daniela
Verfasst: Dienstag 1. Juli 2008, 12:26
von Leonidas
Daniela hat geschrieben:
noch dieses "r" steht? Wofür ist das gedacht?
Read. Steht auch so in der Dokumentation.
Verfasst: Dienstag 1. Juli 2008, 12:38
von audax
Wow. Bei Namen wie "WertBeginntZeichenNachDemSuchbegriff" kann ich nur noch PEP8 schreien:
PEP8 !
Verfasst: Dienstag 1. Juli 2008, 12:39
von Daniela
öhm, Danke. Darauf hätte ich auch alleine kommen können.
Naja jedenfalls funktioniert das Skript von dor_neue wundebar, nur die Ausgabe irritiert mich jetzt doch ein bisschen, denn ich bekomme folgendes für die Länge und Breite ausgegeben:
Code: Alles auswählen
PltfLength = 0 705
{'PltfLength = ': '05'}
{'PltfLength = ': '05'}
PltfWidth = 0 600
{'PltfWidth = ': '00'}
{'PltfWidth = ': '00'}
Jetzt stellt sich mir die Frage, wo kommt z.B. bei der Länge = 0 705, die "0" her und genauso warum werden die nächsten 2 Zeilen übehaupt ausgegeben. Geht das irgendwie, dass am Ende nur "Länge = 750" dasteht???
Daniela
Verfasst: Dienstag 1. Juli 2008, 12:50
von DasIch
Der ConfigParser macht genau das was er soll. Du hast bloß kein richtiges INI File. Kommentare werden in INI files mit einem Semikolon eingeleitet, nicht mit einem Slash.
Verfasst: Dienstag 1. Juli 2008, 12:59
von Daniela
Es muss ja aber an sich trotzdem so eine Art ini-Datei sein, schließlich ist die Dateiendung .ini und es ist eine Konfigurationsdatei.
naja aber wenn es nicht geht, dann nehm ich das funktionierende Skript von dor_neue.
Verfasst: Dienstag 1. Juli 2008, 13:07
von audax
Man kann dem ConfigParser schon sagen, wie Kommentare eingeleitet werden.
Es gibt keinen Standard für INIs, das macht jeder, wie er will.
Verfasst: Dienstag 1. Juli 2008, 13:13
von Rebecca
audax hat geschrieben:Man kann dem ConfigParser schon sagen, wie Kommentare eingeleitet werden.
Wie? Ich hab da eben nichts gefunden.
Standardmaessig akzepiert der ConigParser # und ; als Kommentarzeichen.
dor_neue: Kannst du so langen Code bitte demnaechst
auslagern, es wird schwierig, in solchen Threads zu antworten, und irgendwann geht's dann gar nicht mehr (dank phpbb).
Verfasst: Dienstag 1. Juli 2008, 14:05
von dor_neue
Rebecca hat geschrieben:
dor_neue: Kannst du so langen Code bitte demnaechst
auslagern, es wird schwierig, in solchen Threads zu antworten, und irgendwann geht's dann gar nicht mehr (dank phpbb).
erledigt....
Verfasst: Dienstag 1. Juli 2008, 14:56
von Daniela
Ich muss nochmal kurz stören.
und zwar wird ja bei
dem Skript am Ende ein String zurück gegeben. Das hab ich jetzt schon so umgebaut, dass nur noch das zurück gegeben wird, was ich brauche, also die Länge und die Breite. Nur kann ich im Moment damit noch keine Berechnungen durchführen, weil die Werte ja in einem String abgespeichert sind. Ich bräuchte sie aber mindestens in Integer-Form.
Gibt es eigentlich die Möglichkeit einen String, der definitiv aus Zahlen besteht, in einen Integer umzuwandeln??
Die letzten Zeilen meines Skriptes sehen wie folgt aus:
Code: Alles auswählen
def WertSuchen (SuchText = "", Suchstring = "", IstInHochkommasEingeschlossen = True, \
NameDesWertes = None, WertBeginntZeichenNachDemSuchbegriff = 0):
...
...
...
return WerteString
DateiInhalt = DateiEinlesen("Platform.ini")
Laenge = WertSuchen(DateiInhalt, "PltfLength = ", "Laenge", 0)
Breite = WertSuchen(DateiInhalt, "PltfWidth = ", "Breite", 0)
Verfasst: Dienstag 1. Juli 2008, 15:00
von dor_neue
Verfasst: Dienstag 1. Juli 2008, 15:06
von Daniela
Dankeschön.
Das ist ja einfach
