Seite 1 von 1

Daten einer *.py-Datei auslesen

Verfasst: Freitag 22. Februar 2008, 15:05
von Mister Wing
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?

Verfasst: Freitag 22. Februar 2008, 15:18
von Käptn Haddock
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

Verfasst: Freitag 22. Februar 2008, 15:44
von 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'

Verfasst: Freitag 22. Februar 2008, 16:36
von Mister Wing
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.

Verfasst: Freitag 22. Februar 2008, 17:55
von 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.