2009-05-14 26 views
8

Necesito escribir una serie de matrices en un archivo de texto plano de python. Todas mis matrículas están en formato flotante por lo que el simple file.write() y file.writelines()Cómo escribo una lista flotante de listas para archivar en Python

no funcionan. ¿Hay algún método de conversión que pueda emplear que no me lleve a recorrer todas las listas (matriz = lista de listas en mi caso) convirtiendo los valores individuales?

Creo que debería aclarar, que no tiene que parecer una matriz, solo los valores asociados en una lista fácil de analizar, como leeré más adelante. ¡Todo en una línea puede hacer esto más fácil!

+0

puede explicar? ¿Por qué file.write() no funciona para usted? – JPCosta

Respuesta

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 desea más control sobre el formato de cada valor:

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

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

str (m) produce algo diferente – SilentGhost

+0

diferente de qué? –

+0

Ah, usted escribió la otra solución. Sí, dependiendo de cómo debe formatearse la salida (separada por comas, etc.), puede ser necesario el desarrollo manual de cadenas. –

7

las siguientes obras para mí:

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

Por qué no usar 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'] 

En este punto se puede ver en la 'delme.txt' archivo con vi

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

para la fila en la matriz: file.write ("" .join (mapa (str, fila)) + "\ n")

Esto funciona para mí ... y escribe el resultado en formato de matriz

Cuestiones relacionadas