BuiltinFunctionType (Operatoren) aus txt File in Dictionary

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
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Montag 21. Januar 2008, 12:41

Hallo!

ich habe folgendes Problem:

Ich möchte aus einem Text File ein folgendes Dictionary erstellen:

test = {'a': (truediv, 1000),
'b': (mul, 153)}

Wobei print test['a'][0] folgendes ausgibt: <built-in function truediv>

Mein Text File sieht so aus:

a truesdiv 1000
b mul 153

Hier der Code:

Code: Alles auswählen

from operator import mul, truediv

def dict_laden(pfad):
        d ={}  
        datei = file(pfad) 
        liste = datei.readlines() 
        for eintrag in liste:
            l_eintrag = eintrag.split() 
            d[l_eintrag[0]] = l_eintrag[1], float(l_eintrag[2])
        datei.close()
        return d

def main():
    d = dict_laden(r'operator.txt')
    x = 42 
    operation, value = d['test']
    print operation(x, value)
Wenn ich main() ausführe bekomme ich aber folgende Fehlermeldung, weil truediv als string vorliegt:
TypeError: 'str' object is not callable

Wie kann ich den Operator in einen built-in function-type umwandeln?

Liebe Grüsse
Stefanie
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 21. Januar 2008, 13:04

Hallo ete!

Bringt dich das weiter?

Code: Alles auswählen

>>> import operator
>>> getattr(operator, "truediv", None)
<built-in function truediv>
>>> 
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Montag 21. Januar 2008, 13:12

Code: Alles auswählen

import operator
from itertools import imap


def parse_line(line):
    name, operation, value = line.split()
    return (name, (getattr(operator, operation), float(value)))


def dict_laden(pfad):
    lines = open(pfad)
    result = dict(imap(parse_line, lines))
    lines.close()
    return result


def main():
    d = dict_laden('test.txt')
    x = 42
    operation, value = d['a']
    print operation(x, value)
:-)
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Dienstag 22. Januar 2008, 12:52

Danke :D
Antworten