ConfigParser - Zahlen lesen?

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
lena_92
User
Beiträge: 28
Registriert: Donnerstag 24. Juli 2014, 15:00

Hallo zusammen,

ich benutzte ConfigParser um Variablen schnell verändern zu können. Mit dem unten stehenden Code lade ich die Datei und die Variablen.

Code: Alles auswählen

#ConfigParser

# ConfigParser function is defined
config = ConfigParser.RawConfigParser()

# Variables out of Variablen.cfg are loaded
config.read('/home/Variablen.cfg')

# Variable var1 out of SectionOne is defined as e ...
e = config.get('SectionOne', 'var1')

# Variable var2 out of SectionOne is defined as f ...
f = config.get('SectionOne', 'var2')
Der folgende Code ist meine .cfg Datei, in der ich meine Variablen ablege. var1 ist meine erste Variable und besteht aus Buichstaben, Zahlen und Sonderzeichen. var2 beseht nur aus Zahlen.

Code: Alles auswählen

[SectionOne]

# Erste Variable
var1: Test/1
# Zweite Variable
var2:  700
Wenn ich nun meine Variablen lade, funktioniert e = var1 ausgezeichnet. Wenn ich nun f = var2 lade, bekomme ich den Fehler das ich f spezifizieren soll. Für mich bedeutet das, dass meine Variable nicht übergeben werden kann. Mache ich etwas falsch? Kann ich mit ConfigParser nur Zahlen nicht übergeben? Muss ich Zahlen anderes aufrufen? (vllt: f = config.getitem('SectionOne', 'var2')?
Würde mich freuen, wenn mir jmd. helfen könnte.

Grüße und Danke
Lena
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Poste mal bitte die exakte Fehlermeldung und den Code dazu!

Dir ist schon klar, was ``dict.get`` genau macht? Ich vermute Du weißt es nicht ;-) Lies Dir das noch einmal durch: https://docs.python.org/3/library/stdty ... types-dict

Kurz um, so müsste es wohl lauten:

Code: Alles auswählen

e = config['SectionOne']['var1']
f = config['SectionOne']['var2']
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Psst, `ConfigParser` != `dict`. ;-)
lena_92
User
Beiträge: 28
Registriert: Donnerstag 24. Juli 2014, 15:00

Danke für die schnellen Antworten.
@ Hyperion: Deine Versionen
Hyperion hat geschrieben:Kurz um, so müsste es wohl lauten:

Code: [Alles auswählen] [Aufklappen/Zusammenklappen]
e = config['SectionOne']['var1']
f = config['SectionOne']['var2']
klappt bei mir leider gar nicht. Da gibt es direkt eine Fehlermeldung.

Ich habe es nun aber gelöst:

Sobald ich "f" weiterverarbeiten, muss ich "f" mit int(f) behandeln. Dies hatte ich vergessen.

Danke :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Hyperion: Psst, `ConfigParser` != `dict`. ;-)
Mist. Stimmt... ich hatte aufgrund der Beispiele in der Modul-Doku daraus gefolgert, dass sich das wie ein Dictionary verhält. :oops: (Dies ist tatsächlich nur bei den Section-Objekten der Fall, bei dem es eine ``Get``-Methode gibt, die sich analog zu der von Dicts verhält)

@lena_92: Mein Beispiel stimmt dennoch, denn auch diese Syntax ist dabei möglich:

Code: Alles auswählen

import configparser
config = configparser.ConfigParser()

data = """
    [SectionOne]

    # Erste Variable
    var1: Test/1
    # Zweite Variable
    var2:  700
"""

config.read_string(data)

config["SectionOne"]["var1"]
> 'Test/1'

config["SectionOne"]["var2"]
> '700'
Vielleicht hat sich das von Python2 auf 3 geändert? Ich habe Python 3.3 dafür verwendet.

Aufgrund einer Fehlermeldung im ersten Posting wären wir vermutlich schnell darauf gekommen, dass Du im weiteren Verlauf einen Fehler bekommst und vermutlich auch weswegen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lena_92
User
Beiträge: 28
Registriert: Donnerstag 24. Juli 2014, 15:00

Vielen Dank für die Hilfe, schlussendlich ist der Fehler behoben und ich eine Ecke schlauer :-)
Danke
Antworten