Tengo un problema con la conversión de una lista a un archivo .txt. Tengo que guardar una matriz Nx4 en un archivo de texto sin corchetes sin cambiar el orden ni las líneas. Mi código es:

for n,en in enumerate(var_4):
    stats.append(str([var_1,var_2[n],var3[n],en]))

¿Qué comando de escritura debo escribir para obtener un archivo de texto como:

var_1 , var_2[0] , var_3[0] , var_4[0]
var_1 , var_2[1] , var_3[1] , var_4[1]

...

var_1 , var_2[N] , var_3[N] , var_4[N]
0
GDino 10 dic. 2015 a las 14:57

3 respuestas

La mejor respuesta
s = ", ".join(list)

Unirá una lista de cadenas en una cadena con "," como delimitadores

s = ", ".join(map(str, list))

Funcionará si los elementos de una lista no son cadenas

o.write(s +"\n")

Escribirá el resultado y agregará una nueva línea después de escribir una cadena

5
Victor K 10 dic. 2015 a las 12:53

Gracias a las dos respuestas. Se requería una combinación de ambos para obtener el resultado deseado. La solución fue:

with open('list.txt','a') as f:
    for l,el in enumerate(stats):
        string = ', '.join(map(str,el))
        for item in string:
            f.write(item)
    f.write('\n')

Gracias de nuevo, me ahorraste muchos problemas.

0
GDino 10 dic. 2015 a las 14:56

Está convirtiendo una lista en una cadena, lo que le dará una representación legible de la lista con corchetes y comas.

En su lugar, puede recorrer la lista y convertir los elementos en cadenas individualmente. Puedes hacer esto con un generador:

strings = (str(item) for item in [var_1, var_2[n], var3[n], en])

Luego puede escribir las cadenas en un archivo de texto, por ejemplo:

with open("list.txt", "a") as f:
    for item in strings:
        f.write(item + "\n")

"a" significa que abre el archivo en modo de adición en lugar de sobrescribir su contenido cada vez.

O simplemente recorra la lista y convierta los elementos en cadenas directamente al recorrerla:

with open("list.txt", "a") as f:
    for item in mylist:
        f.write(str(item) + "\n")
1
Raimund Krämer 10 dic. 2015 a las 13:28