Подтвердить что ты не робот

Написать и прочитать список из файла

Это немного странный запрос, но я ищу способ записать список в файл, а затем прочитать его в другой раз.

У меня нет возможности переделать списки, чтобы они были правильно сформированы/отформатированы, как показано в примере ниже.

У моих списков есть такие данные, как:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)
4b9b3361

Ответ 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.

Ответ 2

Пока ваш файл имеет последовательное форматирование (т.е. разрывы строк), это просто с базовыми файлами ввода-вывода и строковыми операциями:

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

Это будет хранить ваш файл данных в виде списка элементов, по одному в каждой строке. Чтобы затем положить его в файл, вы сделали бы обратное:

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

Надеюсь, это соответствует тому, что вы ищете.

Ответ 3

Давайте сначала определим список:

lst=[1,2,3]

Вы можете напрямую записать свой список в файл:

f=open("filename.txt","w")
f.write(str(lst))
f.close()

Чтобы прочитать ваш список из текстового файла, сначала вы читаете файл и сохраняете его в переменной:

f=open("filename.txt","r")
lst=f.read()
f.close()

Тип переменной lst конечно, строка. Вы можете преобразовать эту строку в массив, используя функцию eval.

lst=eval(lst)