Ответ 1
Если вам не нужно, чтобы он был доступен для чтения/редактирования, самым простым решением является просто использовать pickle
.
Чтобы написать:
with open(the_filename, 'wb') as f:
pickle.dump(my_list, f)
Считать:
with open(the_filename, 'rb') as f:
my_list = pickle.load(f)
Если вам нужно, чтобы они были удобочитаемыми для человека, нам нужна дополнительная информация.
Если my_list
гарантированно будет списком строк без встроенных строк перевода, просто напишите их по одной в строке:
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]
Если это строки Unicode, а не байтовые строки, вы захотите encode
их. (Или, что еще хуже, если они байтовые строки, но не обязательно в той же кодировке, что и ваша система по умолчанию.)
Если у них могут быть символы новой строки или непечатаемые символы и т.д., вы можете использовать экранирование или цитату. Python имеет множество различных видов экранирования, встроенных в stdlib.
Позвольте использовать unicode-escape
здесь, чтобы решить обе указанные проблемы сразу:
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]
Вы также можете использовать решение в стиле 3.x в 2.x с помощью модуля codecs
или 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, так что это один очевидный способ? Это зависит... Для короткой версии: если вам нужно работать с версиями Python до версии 2.6, используйте codecs
; если нет, используйте io
.