Disons que j'ai le score de liste = [1,2,3,4,5] et il est changé pendant que mon programme est en cours d'exécution. Comment pourrais-je l'enregistrer dans un fichier afin que, lors de la prochaine exécution du programme, je puisse accéder à la liste modifiée en tant que type de liste?
J'ai essayé:
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)
Cependant, les éléments de la liste sont des chaînes et non des entiers.
J'ai décidé de ne pas utiliser de cornichon, car je souhaitais pouvoir ouvrir le fichier texte et modifier facilement son contenu lors des tests. Par conséquent, j'ai fait ceci:
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()))
Ainsi, les éléments du fichier sont lus sous forme d'entiers, même s'ils sont stockés dans le fichier sous forme de chaînes.
Vous pouvez utiliser le module pickle
pour cela. Ce module a deux méthodes,
https://docs.python.org/3.3/library/pickle.html code:
>>> 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]
Si vous ne voulez pas utiliser pickle, vous pouvez stocker la liste sous forme de texte, puis l’évaluer:
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's 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'
pickle
et d'autres packages de sérialisation fonctionnent. Il en va de même pour l'écrire dans un fichier .py
que vous pouvez ensuite importer.
>>> 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]
J'utilise des pandas.
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)
Utilisez ceci si vous importez quand même des pandas pour d’autres calculs.