Escribir una lista en un archivo con Python

¿Es ésta la forma más limpia de escribir una lista en un archivo, ya que writelines() no inserta caracteres de nueva línea?

file.writelines(["%s\n" % item  for item in list])

Parece que habría una forma estándar...

Solución

Puedes utilizar un bucle:

with open('your_file.txt', 'w') as f:
    for item in my_list:
        f.write("%s\n" % item)

En Python 2, también puedes usar

with open('your_file.txt', 'w') as f:
    for item in my_list:
        print >> f, item

Si quieres hacer una sola llamada a la función, al menos quita los corchetes [], para que las cadenas a imprimir se hagan de una en una (un genexp en lugar de un listcomp) -- no hay razón para ocupar toda la memoria necesaria para materializar toda la lista de cadenas.

Comentarios (6)

¿Qué va a hacer con el archivo? ¿Existe este archivo para los humanos, u otros programas con claros requisitos de interoperabilidad?

Si sólo estás tratando de serializar una lista en el disco para su posterior uso por la misma aplicación de python, deberías estar pickleando la lista.

import pickle

with open('outfile', 'wb') as fp:
    pickle.dump(itemlist, fp)

Para leerla de nuevo:

with open ('outfile', 'rb') as fp:
    itemlist = pickle.load(fp)
Comentarios (7)

La forma más sencilla es:

``lang-python outfile.write("|n".join(itemlist))


Puedes asegurarte de que todos los elementos de la lista de elementos son cadenas utilizando una expresión generadora:

``lang-python
outfile.write("|n".join(str(item) for item in itemlist))

Recuerda que toda la lista de itemlist debe estar en memoria, así que ten cuidado con el consumo de memoria.

Comentarios (10)