Как сохранить список в файле и прочитать его как тип списка?

Скажем, у меня есть список list = [1,2,3,4,5], и он изменяется во время моей программы. Как я могу сохранить его в файл, чтобы в следующий раз, когда программа запускается, я могу получить доступ к списку изменений в виде списка?

Я пробовал:

score=[1,2,3,4,5]

with open("file.txt", 'w') as f:
    for s in score:
        f.write(str(s) + '\n')

with open("file.txt", 'r') as f:
    score = [line.rstrip('\n') for line in f]


print(score)

Но это приводит к тому, что элементы в списке являются строками не целыми числами.

Ответ 1

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

score = [1,2,3,4,5]

with open("file.txt", "w") as f:
    for s in score:
        f.write(str(s) +"\n")

with open("file.txt", "r") as f:
  for line in f:
    score.append(int(line.strip()))

Итак, элементы в файле считаются целыми числами, несмотря на то, что они хранятся в файле как строки.

Ответ 2

Для этого вы можете использовать модуль pickle. Этот модуль имеет два метода:

  • Травление (dump). Преобразование объектов Python в строковое представление.
  • Unpickling (load): получение исходных объектов из сохраненного строкового представления.

https://docs.python.org/3.3/library/pickle.html код:

>>> import pickle
>>> l = [1,2,3,4]
>>> with open("test.txt", "wb") as fp:   #Pickling
...   pickle.dump(l, fp)
... 
>>> with open("test.txt", "rb") as fp:   # Unpickling
...   b = pickle.load(fp)
... 
>>> b
[1, 2, 3, 4]

Ответ 3

Если вы не хотите использовать pickle, вы можете сохранить список как текст, а затем оценить его:

data = [0,1,2,3,4,5]
with open("test.txt", "w") as file:
    file.write(str(data))

with open("test.txt", "r") as file:
    data2 = eval(file.readline())

# Let see if data and types are same.
print(data, type(data), type(data[0]))
print(data2, type(data2), type(data2[0]))

[0, 1, 2, 3, 4, 5] class 'list' class 'int'

[0, 1, 2, 3, 4, 5] class 'list' class 'int'

Ответ 4

pickle и другие пакеты сериализации. Так записывает его в файл .py, который вы затем можете импортировать.

>>> score = [1,2,3,4,5]
>>> 
>>> with open('file.py', 'w') as f:
...   f.write('score = %s' % score)
... 
>>> from file import score as my_list
>>> print(my_list)
[1, 2, 3, 4, 5]

Ответ 5

Я использую панды.

import pandas as pd
x = pd.Series([1,2,3,4,5])
x.to_excel('temp.xlsx')
y = list(pd.read_excel('temp.xlsx')[0])
print(y)

Используйте это, если вы все равно импортируете панды для других вычислений.

Ответ 6

Если вы хотите, вы можете использовать функцию numpy save для сохранения списка в виде файла. Скажем, у вас есть два списка

sampleList1=['z','x','a','b']
sampleList2=[[1,2],[4,5]]

здесь функция сохранения списка в виде файла, помните, что вам нужно сохранить расширение .npy

def saveList(myList,filename):
    # the filename should mention the extension 'npy'
    np.save(filename,myList)
    print("Saved successfully!")

а тут функция для загрузки файла в список

def loadList(filename):
    # the filename should mention the extension 'npy'
    tempNumpyArray=np.load(filename)
    return tempNumpyArray.tolist()

рабочий пример

>>> saveList(sampleList1,'sampleList1.npy')
>>> Saved successfully!
>>> saveList(sampleList2,'sampleList2.npy')
>>> Saved successfully!

# loading the list now 
>>> loadedList1=loadList('sampleList1.npy')
>>> loadedList2=loadList('sampleList2.npy')

>>> loadedList1==sampleList1
>>> True

>>> print(loadedList1,sampleList1)

>>> ['z', 'x', 'a', 'b'] ['z', 'x', 'a', 'b']