Dateninfos in Dictionary speichern

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
DnlMrx
User
Beiträge: 4
Registriert: Montag 29. November 2010, 12:29

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
DnlMrx
User
Beiträge: 4
Registriert: Montag 29. November 2010, 12:29

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.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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 ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
DnlMrx
User
Beiträge: 4
Registriert: Montag 29. November 2010, 12:29

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Zuletzt geändert von Xynon1 am Montag 29. November 2010, 14:44, insgesamt 1-mal geändert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Trichter
User
Beiträge: 45
Registriert: Montag 20. April 2009, 10:21

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" ...).
Antworten