2009-05-14 15 views
8

Potrzebuję napisać serię macierzy na zwykły plik tekstowy z Pythona. Wszystkie moje macierze są w formacie pływającym, więc proste file.write() i file.writelines()Jak napisać listę list do pliku w Pythonie

nie działają. Czy istnieje metoda konwersji, którą mogę zastosować, aby nie przechodzić przez wszystkie listy (matrix = lista list w moim przypadku) konwertujących poszczególne wartości?

Chyba powinienem wyjaśnić, że nie musi to wyglądać jak macierz, tylko skojarzone wartości w łatwej do przeanalizowania liście, jak będę czytał później. Wszystko na jednej linii może rzeczywiście ułatwić to!

+0

Czy możesz wyjaśnić? Dlaczego plik file.write() nie działa? – JPCosta

Odpowiedz

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

Jeśli chcesz mieć większą kontrolę nad formatem każdej wartości:

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

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

str (m) produkuje coś innego – SilentGhost

+0

różni się od czego? –

+0

Och, napisałeś inne rozwiązanie. Tak, w zależności od tego, jak dane wyjściowe mają być sformatowane (rozdzielane przecinkami itp.), Może być wymagane ręczne tworzenie ciągów znaków. –

7

następujące prace dla mnie:

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

dlaczego nie korzystać pickle?

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'] 

W tym momencie można zajrzeć do pliku 'delme.txt' z vi

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

dla wiersza w macierzy: file.write (”” .join (mapa (str, wiersz)) + "\ n")

działa to dla mnie ... i zapisuje dane wyjściowe w formacie matrycy