dynamische variablen generieren
hallo, ich möchte aus einer datei(liste.txt) inhalte einlesen: liste.txt: abcd:827635 hjdherw:8436746 variable:zahl ....usw ########### f=file('E:\\Pfad\\zur\\datei\\liste.txt', 'r') f.seek(0) ########### und diese dann als variablen anlegen und mit zahlen befuellen: ########### for f_name in f: f_split=f_name.split(":") ########### und jetzt fehlt genau die eine zeile die mir die variablen anlegt und mit den werten befuellt! ich habe schon sowas versucht: ########## eval("f_split[0]"="f_split[1]") ########## oder ########## exec(eval("f_split[0]"="f_split[1]")) ########## aber das passt alles nicht. wie isses richtig? danke fuer einen tipp. gruss josh _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Monday 27 September 2004 13:33, Johannes Krauth wrote:
########### for f_name in f: f_split=f_name.split(":")
eval(compile('%s=%s' % (f_split[0], f_split[1]), 'dummy', 'single')) hth -- Simon Pamiés (bipbap@gmx.de) [archlinux 0.7, kernel 2.6.8.1, kmail 3.3] _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Monday 27 September 2004 13:33, Johannes Krauth wrote:
hallo,
ich möchte aus einer datei(liste.txt) inhalte einlesen:
liste.txt:
abcd:827635 hjdherw:8436746 variable:zahl
....usw
########### f=file('E:\\Pfad\\zur\\datei\\liste.txt', 'r') f.seek(0) ###########
und diese dann als variablen anlegen und mit zahlen befuellen:
########### for f_name in f: f_split=f_name.split(":") ###########
und jetzt fehlt genau die eine zeile die mir die variablen anlegt und mit den werten befuellt!
Folgendes funktioniert: dict = locals() dict['a'] = 123 print a Aber wenn man die Werte aus einer Datei einliest muß man prüfen ob die auch in Ordnung sind... Gruß Uli PS: Gibt es da nicht ein python-Modul für Konfigurationsdateien? Vielleicht hilft das? _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Folgendes funktioniert:
dict = locals() dict['a'] = 123
Geht manchmal in die Hose, laut python.org ist locals() nicht vorgesehen um Zuweisungen vorzunehmen. Gruß, Uwe _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Mon, 27 Sep 2004 13:56:50 +0200 "Uwe Schmitt" <schmitt@num.uni-sb.de> wrote:
Folgendes funktioniert:
dict = locals() dict['a'] = 123
Geht manchmal in die Hose, laut python.org ist locals() nicht vorgesehen um Zuweisungen vorzunehmen.
Stimmt. Damit zerlegst du den Interpreter. Du könntest genauso mit DLL Injection arbeiten... das ist gar nicht gut! Ich würde dir nie Option des Dictonarys empfehlen. grüße, Marek _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Montag 27 September 2004 13:33 schrieb Johannes Krauth:
hallo,
ich möchte aus einer datei(liste.txt) inhalte einlesen:
liste.txt:
abcd:827635 hjdherw:8436746 variable:zahl
Schau dir mal das Modul 'ConfigParser' an. Vielleicht hilft dir das weiter. -- cu Roland Kruggel mailto: rk-liste@gmx.de System: Intel 3.2Ghz, Debian sid, 2.6.8.1, KDE 3.3.3 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Johannes Krauth wrote:
hallo,
ich möchte aus einer datei(liste.txt) inhalte einlesen:
liste.txt:
abcd:827635 hjdherw:8436746 variable:zahl
....usw
########### f=file('E:\\Pfad\\zur\\datei\\liste.txt', 'r') f.seek(0) ###########
und diese dann als variablen anlegen und mit zahlen befuellen:
[SNIP] Wäre es dann nicht viel besser ein Dictionary zu benutzer und den Namen als Schlüssel zu verwenden? Ich halte die Verwendung von eval() nämlich für problematisch, wenn man bei sowas nicht aufpasst, hat man ganz schnell ganz komische Fehler. Also würd ich empfehlen, auf die Verwendung von eval() zu verzichten. bis dann Sebastian _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo, Am Montag, 27. Sep 2004, 13:33:02 +0200 schrieb Johannes Krauth:
########### for f_name in f: f_split=f_name.split(":") ###########
Du meinst wahrscheinlich l = [] for zeile in f: l.append( zeile.split( ':')) Aber die Lösung mit dem Dictionary dürfte eher die logische richtige sein. Gruß Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Ein anderer Weg um Variable zu "erschaffen". Meiner Meinung nach der sicherste und wahrscheinlich um einiges schneller als Eval und compile zu bemühen:
class VarInstance(object): ... def __init__(self, dictWithValues): ... self.__dict = dictWithValues ... def __getattr__(self, wants): ... if self.__dict.has_key(wants): ... return self.__dict[wants] ... else: ... raise NameError ... dictWithValues = {'var1':'Hi', 'var2':3, 'var4':45} myVars = VarInstance(dictWithValues) myVars.var1 'Hi' myVars.var2 3 myVars.var3 Traceback (most recent call last): File "<interactive input>", line 1, in ? File "<interactive input>", line 8, in __getattr__ NameError myVars.var4 45
Mit vielen Gruss-Instanzen, Marco _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (9)
-
Bertram Scharpf
-
Johannes Krauth
-
Marco Aschwanden
-
Marek Kubica
-
Roland M. Kruggel
-
Sebastian Meyer
-
Simon Pamies
-
Ulrich Kuettler
-
Uwe Schmitt