Daten einer *.py-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
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

Hallo,

ich habe mehrere Ordner in den eine Datei existiert die den gleichen Namen hat.

dir1 -> xxx.py
dir2 -> xxx.py
dir3 -> xxx.py
...

In jeder dieser Dateien stehen die gleichen Variablen mit unterschiedlichen Daten.

xxx.py in dir1

Code: Alles auswählen

name = 'Thomas'
alter = '23'
gewicht = '87kg'
xxx.py in dir2

Code: Alles auswählen

name = 'Karsten'
alter = '18'
gewicht = '72kg'
xxx.py in dir3

Code: Alles auswählen

name = 'Stefan'
alter = '33'
gewicht = '90kg'
...


Wie kann man diese Informationen sinnvoll auslesen und speichern?
Ein Dictionary wäre doch gut oder?

Zum Beispiel:

Code: Alles auswählen

...

mydict = {}

mydict = dict(key1,inhalt aus ertser datei 1)
mydict = dict(key2,inhalt aus ertser datei 2)
...

Wie lässt sich das realisieren, hab was von execfile()gelesen, aber nicht wirklicht verstanden.
Kann mir jemand helfen?
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Was willst du denn mit den Daten anstellen? Danach richtet sich, wie du sie aufbereitest.
Lesen würde ich sie erst mal als Liste o.ä:

Code: Alles auswählen

f=file('Datei.py', 'r')
inhalt=f.readlines()
Die einzelnen Listen der Dateien könntest du anschliessend zusammenhängen oder zu einer Über-Liste aus Listen zusammenfassen.

Gruß Uwe
---------------------------------
have a lot of fun!
BlackJack

So kommt man an die Inhalte heran:

Code: Alles auswählen

In [575]: !cat xxx.py
name = 'Stefan'
alter = '33'
gewicht = '90kg'

In [576]: vars = dict()

In [577]: execfile('xxx.py', vars)

In [578]: vars['name']
Out[578]: 'Stefan'

In [579]: vars['alter']
Out[579]: '33'

In [580]: vars['gewicht']
Out[580]: '90kg'
Mister Wing
User
Beiträge: 18
Registriert: Donnerstag 23. August 2007, 08:53
Wohnort: Berlin

Wie komm ich an alle Inhalte ran.
Also ein Schleife denke ich mir.

Wenn ich die iterativ ausgeben will, bekom ich egal wie ich es schon probiert habe, immer ein None zurück.


Code: Alles auswählen

...

wi = {}
temp_dic = {}
for i,j in data.items():
    temp_dic[i] = execfile(j,wi)        ##in j steht der Pfad zur Datei
    wi = {}

...
Am Ende soll sozusagen ein Dict in einem Dict sein, so dass zu jedem key ein Datensatz gehört. Der Datensatz hat aber wiederum mehren Einträge, eben genau name, alter und gewicht.
BlackJack

`execfile()` gibt nichts zurück, bzw. eben `None`. Wenn Du `wi` in der Schleife vor dem `execfile()` an ein leeres Dictionary bindest, kannst Du Dir das vor der Schleife sparen.
Antworten