Если вам не нужно быть человеком считываемые/редактируемые, самым простым решением является просто использовать 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
.
Мне нравится библиотека рассола, это очень мило и прекрасно работает.Я уже реализовал его, и, похоже, он работает нормально. Спасибо, я помечаю вас как зеленый галочку, как только это позволит мне. – Ryflex
unicode-escape ... Мне пришлось открыть его как «wb» из-за TypeError: должен быть str, а не байтами – rluks
@ Pan.student: вы используете Python 3.x, правильно? В Python 2, о чем спрашивал этот вопрос, 'str' и' bytes' относятся к одному типу, а разница между двоичными файлами и текстовыми файлами - это просто перевод новой строки. В Python 3, 'str' и' unicode' являются одним и тем же типом, а разница между двоичными файлами и текстовыми файлами заключается в том, что текстовые файлы автоматически кодируются и декодируются для вас. (Вы можете получить 3.x-подобное поведение, если 2.x, если вы будете осторожны, включая текстовые файлы в стиле 3.x с 'io.open', но об этом не спрашивал.) – abarnert