Werte aus .ini - Datei auslesen

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.
Antworten
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

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
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Sieh dir doch einmal [mod]ConfigParser[/mod] an! ;)
I am not part of the allesburner. I am the [url=http://allesburner.de]allesburner[/url].
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

Danke, werd ich mir mal anschauen.
dor_neue
User
Beiträge: 74
Registriert: Montag 16. Juni 2008, 18:51

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... :P Wird aber ab jetzt besser...
Zuletzt geändert von dor_neue am Dienstag 1. Juli 2008, 14:05, insgesamt 2-mal geändert.
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

:shock: 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

Code: Alles auswählen

FileInput = open(Dateiname, "r")
noch dieses "r" steht? Wofür ist das gedacht?

Danke schonmal für eure Hilfen

Daniela
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Daniela hat geschrieben:

Code: Alles auswählen

FileInput = open(Dateiname, "r")
noch dieses "r" steht? Wofür ist das gedacht?
Read. Steht auch so in der Dokumentation.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Wow. Bei Namen wie "WertBeginntZeichenNachDemSuchbegriff" kann ich nur noch PEP8 schreien:

PEP8 !
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

öhm, Danke. Darauf hätte ich auch alleine kommen können. :oops:

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

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.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Man kann dem ConfigParser schon sagen, wie Kommentare eingeleitet werden.
Es gibt keinen Standard für INIs, das macht jeder, wie er will.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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).
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
dor_neue
User
Beiträge: 74
Registriert: Montag 16. Juni 2008, 18:51

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....
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

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)
dor_neue
User
Beiträge: 74
Registriert: Montag 16. Juni 2008, 18:51

Code: Alles auswählen

Zahl = int("27")
print Zahl
Daniela
User
Beiträge: 73
Registriert: Donnerstag 19. Juni 2008, 07:32

Dankeschön.
Das ist ja einfach :D :D
Antworten