2009-05-14 2 views
8

J'ai besoin d'écrire une série de matrices dans un fichier texte en clair à partir de python. Toutes mes matrices sont au format flottant, donc les simples fichiers file.write() et file.writelines()Comment écrire une liste flottante de listes à classer en Python

ne fonctionnent pas. Y a-t-il une méthode de conversion que je peux employer et qui ne me fait pas boucler toutes les listes (matrice = liste de listes dans mon cas) en convertissant les valeurs individuelles? Je suppose que je devrais clarifier, qu'il ne doit pas ressembler à une matrice, juste les valeurs associées dans une liste facile à analyser, comme je le lirai plus tard. Tout sur une ligne peut effectivement rendre cela plus facile!

+0

Pouvez-vous expliquer? Pourquoi file.write() ne fonctionne pas pour vous? – JPCosta

Répondre

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

Si vous voulez plus de contrôle sur le format de chaque valeur:

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

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

str (m) produit quelque chose de différent – SilentGhost

+0

différent de quoi? –

+0

Oh, vous avez écrit l'autre solution. Oui, en fonction de la façon dont la sortie doit être formatée (séparée par des virgules, etc.), une construction de chaîne manuelle peut être requise. –

7

les œuvres suivantes pour moi:

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

Pourquoi ne pas utiliser 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'] 

À ce stade, vous pouvez consulter le fichier 'delme.txt' avec vi

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

la ligne de la matrice: file.write (» » .join (carte (str, ligne)) + "\ n")

Cela fonctionne pour moi ... et écrit la sortie sous forme de matrice

Questions connexes