web-dev-qa-db-fra.com

Comment enregistrer une liste dans un fichier et le lire en tant que type de liste?

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.

12
Oceanescence

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.

11
Oceanescence

Vous pouvez utiliser le module pickle pour cela. Ce module a deux méthodes, 

  1. Pickling (dump): Convertit les objets Python en représentation sous forme de chaîne.
  2. Unpickling (load): Récupération des objets originaux à partir de la représentation de chaîne stockée. 

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]
37
Vivek Sable

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'

6
Sarper Bilazer

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]
3
Mike McKerns

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.

0
Manideep Karthik