Как сохранить список в файле и прочитать его как тип списка?
Скажем, у меня есть список 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']