Seite 2 von 2

Verfasst: Samstag 29. März 2008, 22:29
von jens
RedSharky hat geschrieben:Danke, ich glaub, ich habs hinbekommen:
Irgendwie verstehe ich deine read Methode nicht so ganz. Warum sollte man erst das dict übergeben, welches dann aus der ini kommen soll??? Geht es dir darum, das man nur die Werte im dict zurück bekommt, die man vorher angibt?
Auch verstehe ich den Test nicht so genau. Man möchte doch erstmal Daten speichern und dann später wieder einlesen.

Ich würde es so machen:

Code: Alles auswählen

import sys
from ConfigParser import SafeConfigParser

SECTION = "variables"

def write_ini(config):
    ini = SafeConfigParser()
    ini.add_section(SECTION)

    for key,value in config.iteritems():
        ini.set(SECTION, key, value)

    new_ini = file('example.ini','w')
    ini.write(new_ini)


def read_ini():
    ini = SafeConfigParser()
    ini.read('example.ini')

    config = dict(ini.items(SECTION))

    return config


if __name__ == '__main__':
    # schreiben
    config = {'a':"1000",'b':"FooBar"}
    write_ini(config)

    # lesen
    config = read_ini()
    print config
Es gibt sowieso Probleme, wenn du Zahlen "speichern" willst. Denn die kommen als String wieder aus der ini zurück. Der SafeConfigParser wirft auch einen Traceback schon beim speichern.

Verfasst: Sonntag 30. März 2008, 08:11
von RedSharky
jens hat geschrieben:Irgendwie verstehe ich deine read Methode nicht so ganz. Warum sollte man erst das dict übergeben, welches dann aus der ini kommen soll??? Geht es dir darum, das man nur die Werte im dict zurück bekommt, die man vorher angibt?
Zum Teil, aber im Normalfall ist das wohl nicht nötig.
jens hat geschrieben:Auch verstehe ich den Test nicht so genau. Man möchte doch erstmal Daten speichern und dann später wieder einlesen.
Das ist kein Test, sondern ein Beispiel, das man zu einem sinnvollen Programm erweitern kann. Normalerweise liest man erst die Settings ein, damit man mit seinen eigenen Einstellungen arbeiten kann. Und damit sie beim Beenden nicht verloren gehen, werden sie am Ende gespeichert.

Danke für deinen Code. Insbesondere:
jens hat geschrieben:config = dict(ini.items(SECTION))
Das werde ich einarbeiten.

Verfasst: Sonntag 30. März 2008, 21:41
von audax
Du sollstest das niemals verwenden, aber so ginge es z.B.:

Code: Alles auswählen

foo = "bar"
bar = [foo, "bar"]

d = dict((repr(v), k) for k, v in locals().iteritems() if not k.startswith('_'))
print d
print d[repr(foo)] == 'foo'
:D

Verfasst: Montag 31. März 2008, 12:34
von mkesper
Aua...

Code: Alles auswählen

>>> import Tkinter as Tk
>>> foo = "bar"
>>> bar = [foo, "bar"]
>>> d = dict((repr(v), k) for k, v in locals().iteritems() if not k.startswith('
_'))
>>> print d
{"'bar'": 'foo', "<module 'Tkinter' from 'C:\\Python25\\lib\\lib-tk\\Tkinter.pyc
'>": 'Tk', "['bar', 'bar']": 'bar', '{"<module \'Tkinter\' from \'C:\\\\Python25
\\\\lib\\\\lib-tk\\\\Tkinter.pyc\'>": \'Tk\'}': 'd'}

Verfasst: Montag 31. März 2008, 12:42
von audax
Naja, es tut exakt, was es soll :D