Escribir y leer una lista del archivo.

Esta es una solicitud ligeramente extraña, pero estoy buscando una manera de escribir una lista en un archivo y luego leerla en otro momento.

No tengo forma de rehacer las listas para que estén correctamente formadas / formateadas como muestra el siguiente ejemplo.

Mis listas tienen datos como los siguientes:

test data here this is one group :) test data here this is another group :) 

Si no necesita que sea legible para el ser humano / editable, la solución más sencilla es usar pickle .

Escribir:

 with open(the_filename, 'wb') as f: pickle.dump(my_list, f) 

Leer:

 with open(the_filename, 'rb') as f: my_list = pickle.load(f) 

Si necesita que sean legibles por humanos, necesitamos más información.

Si se garantiza que my_list sea ​​una lista de cadenas sin nuevas líneas incrustadas, simplemente escríbalas una por línea:

 with open(the_filename, 'w') as f: for s in my_list: f.write(s + '\n') with open(the_filename, 'r') as f: my_list = [line.rstrip('\n') for line in f] 

Si son cadenas Unicode en lugar de cadenas de bytes, querrá encode . (O, peor aún, si son cadenas de bytes, pero no necesariamente en la misma encoding que la predeterminada del sistema).

Si pueden tener nuevas líneas, o caracteres no imprimibles, etc., puede usar el escape o la cita. Python tiene una variedad de diferentes tipos de escape incorporados en el stdlib.

Usemos unicode-escape aquí para resolver los dos problemas anteriores a la vez:

 with open(the_filename, 'w') as f: for s in my_list: f.write((s + u'\n').encode('unicode-escape')) with open(the_filename, 'r') as f: my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f] 

También puede usar la solución de estilo 3.x en 2.x, ya sea con el módulo de codecs o el módulo io : *

 import io with io.open(the_filename, 'w', encoding='unicode-escape') as f: f.writelines(line + u'\n' for line in my_list) with open(the_filename, 'r') as f: my_list = [line.rstrip(u'\n') for line in f] 

* TOOWTDI, entonces cual es la forma obvia? Depende … Para la versión corta: si necesita trabajar con versiones de Python anteriores a la 2.6, use los codecs ; Si no, usa io .

Siempre que su archivo tenga un formato consistente (es decir, saltos de línea), esto es fácil con solo operaciones básicas de E / S de archivos:

 with open('my_file.txt', 'rU') as in_file: data = in_file.read().split('\n') 

Eso almacenará su archivo de datos como una lista de elementos, uno por línea. Para luego ponerlo en un archivo, harías lo contrario:

 with open('new_file.txt', 'w') as out_file: out_file.write('\n'.join(data)) # This will create a string with all of the items in data separated by new-line characters 

Esperemos que se ajuste a lo que buscas.