Seite 1 von 1

Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 12:38
von DnlMrx
Guten Tag zusammen.

Da ich in der Programmiersprache nicht gerade bewandert bin, suche ich hier eure Hilfe.

Folgender Sachverhalt:

Das Skript soll aus einem bestehenden Ordner alle XML Files nehmen und folgende Parameter berechnen :
-analyses_id
-samples_id
-sha
-md5
-size
-analyses_date

An die Werte zu kommen oder diese berechnen zu lassen, sollte nicht das Problem sein. Mein Problem ist, dass ich nicht weiß, wie ich für jedes dieser Files diese Struktur anlege, damit es so aussieht und dann in db_results angehängt wird, weil über die liste wird im endeffekt iterriert.

db_result = {"analyses_id": 1,
"samples_id": 1,
"sha1hash": "4c9cb8f046eceb68e7912c004a7345365a151f69",
"md5hash": "4446661096186aa92ccd8b2e25a5921b",
"size": 1,
"analyses_date":"2010-11-24",
}
db_results = [db_result]

Ich hoffe, mein Anliegen konnte klar werden und jemand kann mir einen Tipp geben!

Vielen Dank

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 13:11
von sma
Du hast es doch eigentlich schon da stehen (wenn auch nicht markiert als Code mittels [ python ] BBCode). Ein dict definierst du genau so, wie du es hingeschrieben hast, eine Liste ebenfalls. Statt Konstanten musst du da jetzt die Variablen hinschreiben, die du vorher mit den Werten aus der XML-Datei gefüllt hast, also z.B.

Code: Alles auswählen

name = "Tom"
result = {"name": name}
results = [result]
print(name, result, results)
Stefan

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 14:11
von DnlMrx
Ich glaube, Du hast mich missverstanden, mir geht es darum

ich habe als bsp. 20 xml files, also brauche ich 20 dicts die dann in die liste sollen.

Wie gehe ich hierbei vor, so?

for filename in os.listdir(path):
count = count + 1
db_result = {"analyses_id": count,
"samples_id": count,
"sha1hash": filename,
"md5hash": "4446661096186aa92ccd8b2e25a5921b",
"size": 1,
"analyses_date":"2010-11-24",
}

und dann soll jede instanz in eine liste , als bsp db_results append/update db_result

Ich hoffe, das war jetzt besser zu verstehen.

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 14:17
von Xynon1
Als erstes mal hier im Forum die Python Tags für Quellcode nutzen.

Dann würde ich
- Dateinamen in eine Liste auslesen (Wie du ja schon mit "os.listdir(path)" machst
- leere Liste für die Dictionaries anlegen
- über die Dateinamen iterieren
-- leere Dictionary anlegen
-- Dictionary einzeln mit den Werten füllen
-- Dictionary per Methode ".append(...)" der leeren Liste hinzufügen

Und das hast du doch schon im Prinzip, also wo genau liegt dein Problem ?

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 14:31
von DnlMrx
Xynon1 hat geschrieben:Als erstes mal hier im Forum die Python Tags für Quellcode nutzen.

Dann würde ich
- Dateinamen in eine Liste auslesen (Wie du ja schon mit "os.listdir(path)" machst
- leere Liste für die Dictionaries anlegen
- über die Dateinamen iterieren
-- leere Dictionary anlegen
-- Dictionary einzeln mit den Werten füllen
-- Dictionary per Methode ".append(...)" der leeren Liste hinzufügen

Und das hast du doch schon im Prinzip, also wo genau liegt dein Problem ?
Sorry wegen der Quellcodetags, werde ich nutzen. Danke

Mein Problem liegt darin, dass ich nicht weiß, wie ich für jedes File ein leeres Dict anlege

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 14:42
von Xynon1

Code: Alles auswählen

list_ = []
for xml_file in os.listdir(path):
    db_result = {}
    
    #entweder hier gleich füttern, in der Art:
    # db_result["analyses_id"] = ...
    # db_result["samples_id"] = ... 

    #oder  halt noch leer lassen, aber immer 
    list_.append(db_result)
Damit hättest du leere Dictionary Instanzen in einer Liste.
Clever wäre es diese natürlich gleich zu Füllen wenn dies möglich ist.

Wenn du einfach nur leer haben willst würde auch

Code: Alles auswählen

list_ = [{} for _ in xrange(len(os.listdir(path)))]
reichen.

Re: Dateninfos in Dictionary speichern

Verfasst: Montag 29. November 2010, 14:43
von Trichter
Du kannst doch direkt innerhalb der for-Schleife ein leeres dictionary ("tmp_dict = {}") erzeugen, dort deine ausgelesenen Daten reinschreiben und das dictionary dann mittels list.append(tmp_dict) an deine Liste anhängen. (EDIT: Xynon1 war schneller.)

Wahlweise kannst du das leere dictionary auch gleich an deine Liste anhängen ("list.append({})") und dann die ausgelesenen Daten immer in das letzte dictionary der Liste einfügen ("list[-1]['name'] = name" ...).