Escribir y leer una lista del archivo

Esta es una solicitud un poco extraña, pero estoy buscando una forma de escribir una lista para archivar y luego leerla en otro momento.

No tengo forma de rehacer las listas para que estén correctamente formateadas / 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 / editable por el ser humano, la solución más fácil 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 el ser humano, necesitamos más información.

Si se garantiza que my_list es una lista de cadenas sin nuevas líneas incorporadas, 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, lo que es peor, si son cadenas de bytes, pero no necesariamente en la misma encoding que el sistema predeterminado).

Si pueden tener nuevas líneas o caracteres no imprimibles, etc., puede usar escaping o coting. Python tiene una variedad de diferentes tipos de escape integrados 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 estilo 3.x en 2.x, ya sea con el módulo de codecs o con 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, ¿cuál es la única forma obvia? Depende … Para la versión corta: si necesita trabajar con versiones de Python anteriores a 2.6, use codecs ; si no, use io .

Siempre que su archivo tenga un formato consistente (es decir, saltos de línea), esto es fácil con solo el archivo básico IO y las operaciones de cadena:

 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 estás buscando.