Zapis i odczyt listy z pliku

Jest to trochę dziwne żądanie, ale szukam sposobu, aby napisać listę do pliku, a następnie przeczytać ją innym razem.

Nie mam sposobu, aby przerobić listy tak, aby były poprawnie uformowane/sformatowane, jak pokazuje poniższy przykład.

Moje listy mają następujące dane:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)
Author: Aran-Fey, 2013-06-21

2 answers

Jeśli nie potrzebujesz, aby był czytelny dla człowieka/edytowalny, najprostszym rozwiązaniem jest użycie pickle.

Do napisania:

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

Do przeczytania:

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

Jeśli potrzebujesz, aby były czytelne dla człowieka, potrzebujemy więcej informacji.

Jeśli my_list ma być listą łańcuchów bez osadzonych nowych linii, po prostu napisz je po jednym w linii:

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]

Jeśli są to ciągi Unicode, a nie ciągi bajtów, będziesz chciał encode je. (Lub gorzej, jeśli są to ciągi bajtów, ale niekoniecznie w tym samym kodowaniu, co domyślne w systemie.)

Jeśli mogą mieć nowe linie, lub znaki niedrukowalne, itp., można użyć ucieczki lub cytowania. Python ma wiele różnych rodzajów ucieczki wbudowanych w stdlib.

Użyjmy unicode-escape tutaj, aby rozwiązać oba powyższe problemy na raz:

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]

Możesz również użyć 3.rozwiązanie x-style w 2.x, z codecs moduł lub io moduł: *

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, czyli jaki jest jedyny oczywisty sposób? To zależy ... dla skróconej wersji: jeśli chcesz pracować z wersjami Pythona przed 2.6, użyj codecs; Jeśli nie, użyj io.

 95
Author: abarnert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-15 17:56:27

Tak długo, jak Twój plik ma spójne formatowanie( np. podziały wierszy), jest to łatwe dzięki podstawowym operacjom IO i string:

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

, który zapisze Twój plik danych jako listę elementów, po jednym w każdej linii. Aby następnie umieścić go w pliku, zrobisz odwrotnie:

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
Mam nadzieję, że to pasuje do tego, czego szukasz.
 13
Author: Derek Peterson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 23:20:36