2009-05-14 4 views
8

Ich muss eine Reihe von Matrizen in eine reine Textdatei von Python schreiben. Alle meine Matrizen sind im Float-Format, so dass die einfachen file.write() und file.writelines()Wie schreibe ich eine Float-Liste von Listen zu Datei in Python

nicht funktionieren. Gibt es eine Konvertierungsmethode, bei der ich nicht alle Listen (Matrix = Liste von Listen in meinem Fall) durchlaufen muss, um die einzelnen Werte zu konvertieren?

Ich denke, ich sollte klarstellen, dass es nicht wie eine Matrix aussehen muss, nur die zugehörigen Werte in einer leicht zu analysierenden Liste, wie ich später nachlesen werde. Alles in einer Zeile könnte das sogar erleichtern!

+0

können Sie das erklären? Warum funktioniert file.write() nicht für Sie? – JPCosta

Antwort

10
m = [[1.1, 2.1, 3.1], [4.1, 5.1, 6.1], [7.1, 8.1, 9.1]] 
file.write(str(m)) 

Wenn Sie mehr Kontrolle über das Format der einzelnen Werte wollen:

def format(value): 
    return "%.3f" % value 

formatted = [[format(v) for v in r] for r in m] 
file.write(str(formatted)) 
+0

str (m) produziert etwas anderes – SilentGhost

+0

anders als was? –

+0

Oh, du hast die andere Lösung geschrieben. Ja, je nachdem, wie die Ausgabe formatiert werden soll (durch Kommas getrennt usw.), ist möglicherweise eine manuelle String-Erstellung erforderlich. –

7

folgende Arbeiten für mich:

with open(fname, 'w') as f: 
    f.writelines(','.join(str(j) for j in i) + '\n' for i in matrix) 
5

Warum nicht pickle verwenden?

import cPickle as pickle 
pckl_file = file("test.pckl", "w") 
pickle.dump([1,2,3], pckl_file) 
pckl_file.close() 
1
import pickle 

# write object to file 
a = ['hello', 'world'] 
pickle.dump(a, open('delme.txt', 'wb')) 

# read object from file 
b = pickle.load(open('delme.txt', 'rb')) 
print b  # ['hello', 'world'] 

An dieser Stelle Sie in der Datei 'delme.txt' mit vi

vi delme.txt 
    1 (lp0 
    2 S'hello' 
    3 p1 
    4 aS'world' 
    5 p2 
    6 a. 
1

für Zeile in Matrix aussehen: file.write (““ .join (Karte (str, Reihe)) + "\ n")

Dies funktioniert für mich ... und schreibt die Ausgabe in Matrixformat

Verwandte Themen