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 :)
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
.
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.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