2017-03-07 2 views
-1

Ich habe einen Python-Code, der mehrere Variablen generiert, die unterschiedliche Typen und Längen haben. Ich möchte alles auf einen txt schreiben.Schreiben Sie mehrere Variablen unterschiedlicher Typen in Textdatei

Alle Variablen, die ich speichern möchte, sind innerhalb einer dic Variablen namens dicvariable. Um genauer zu sein die Variablen Ich versuche zu sparen:

dicvariable[0]['VarA'] # variable type int 
dicvariable[0]['VarB'] # variable type str 
dicvariable[0]['VarC'] # variable type bool 
dicvariable[0]['VarD'] # variable type NoneType 
dicvariable[0]['VarE'] # variable type list (size can be anything) 
dicvariable[0]['VarF'] # variable type dict (itself contains 5 more variables type ndarray) 

Das erste, was ich tun ist, um die Variablen nacheinander von dicvariable:

VarA = dicvariable[0]['VarA'] # variable type int 
VarB = dicvariable[0]['VarB'] # variable type str 
VarC = dicvariable[0]['VarC'] # variable type bool 
VarD = dicvariable[0]['VarD'] # variable type NoneType 
VarE = dicvariable[0]['VarE'] # variable type list 
VarF1 = dicvariable[0]['VarF']['VarF1'] # variable type nparray (any size) 
VarF2 = dicvariable[0]['VarF']['VarF2'] # variable type nparray (any size) 
VarF3 = dicvariable[0]['VarF']['VarF3'] # variable type nparray (any size) 
VarF4 = dicvariable[0]['VarF']['VarF4'] # variable type nparray (any size) 
VarF5 = dicvariable[0]['VarF']['VarF5'] # variable type nparray (any size) 

Jetzt möchte ich eine txt öffnen zu extrahieren Datei, und speichern Sie dort alle diese Variablen, vorzugsweise in einer Weise, in der ich später leicht den TXT in anderen Programmen wie Matlab laden kann. Auch die ursprünglichen dic Variablen hat nobs Einträge (d. H. dicvariable[0], dicvariable[1], (...), divariable(nobs)), also möchte ich diesen Vorgang wiederholen und nobs txt-Dateien speichern.

EDIT:

Hier ist, was ich versuchte, die einen Fehler ergab:

f = open('file.txt', 'w') 
f.write(VarA + '\n') 
f.write(VarB + '\n') 
f.write(VarC + '\n') 
f.write(VarD + '\n') 
f.write(VarE + '\n') 
f.write(VarF1 + '\n') 
f.write(VarF2 + '\n') 
f.write(VarF3 + '\n') 
f.write(VarF4 + '\n') 
f.write(VarF5 + '\n') 
f.close() 
+0

Und was ist das genaue Problem? – Julien

+0

Okay, ich habe hinzugefügt, was ich versucht habe, was nicht funktioniert hat. Ich habe tatsächlich ein bisschen gesucht, wie man das macht, aber ich konnte es immer noch nicht herausfinden. – phdstudent

+1

Zeigen Sie den Fehler auch bitte. Ich glaube, du hast gerade versäumt, deine Variablen in Strings umzuwandeln: 'f.write (str (VarA) + '\ n')' – Julien

Antwort

-1

Versuchen Sie das shelve Modul: https://docs.python.org/2/library/shelve.html

Diese alle Variablen in ein Wörterbuch in einer Binärdatei speichern wird, IIRC. Es ist nützlich, um die Einstellungen eines Programms zu speichern.

Hier ist ein einfaches Intro: https://automatetheboringstuff.com/chapter8/ zum Abschnitt gehen: Speichern von Variablen mit dem shelve Modul

+0

Shelve-Dateien können nicht in andere Programmiersprachen importiert werden. – TheBlackCat

0

Das Problem ist, dass diese Variablen nicht Textdaten. Sie müssen sie in Text konvertieren, bevor Sie sie in eine Textdatei schreiben können. Der normale Weg dazu ist str(myvar). So könnten Sie f.write(str(VarF1) + '\n') tun. Sie können wie so es in einer Schleife tun:

with open('file.txt', 'w') as f: 
    for subdict in dictvariable: 
     for value in subdict.values(): 
      if not hasattr(value, 'values'): 
       f.write(str(value)+'\n') 
       continue 
      for subvalue in value.values(): 
       f.write(str(subvalue)+'\n') 

Dieser mit einem Generator vereinfacht werden könnte:

def getvars(data):    
    for subdata in data: 
     for value in subdata.values(): 
      if not hasattr(value, 'values'): 
       yield value 
       continue 
      for subvalue in value.values(): 
       yield subvalue 

with open('file.txt', 'w') as f: 
    f.writelines(str(value)+'\n' for value in getvars(dictvariable)) 
Verwandte Themen