it-swarm.com.de

Wie speichert man eine Liste in einer Datei und liest sie als Listentyp?

Angenommen, ich habe die Listenpunktzahl = [1,2,3,4,5] und sie wird geändert, während mein Programm läuft. Wie kann ich es in einer Datei speichern, damit ich das nächste Mal, wenn das Programm ausgeführt wird, als Listentyp auf die geänderte Liste zugreifen kann? 

Ich habe versucht:

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)

Dies führt jedoch dazu, dass die Elemente in der Liste keine Ganzzahlen sind.

12
Oceanescence

Ich entschied, dass ich keine Pickles verwenden wollte, weil ich die Textdatei öffnen und den Inhalt während des Tests leicht ändern konnte. Deshalb habe ich folgendes gemacht:

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()))

Die Elemente in der Datei werden also als Ganzzahlen gelesen, obwohl sie als Zeichenfolgen in der Datei gespeichert sind.

11
Oceanescence

Sie können das pickle-Modul dafür verwenden. Dieses Modul verfügt über zwei Methoden: 

  1. Pickling (dump): Konvertiert Python-Objekte in eine Zeichenfolgendarstellung.
  2. Unpickling (load): Abrufen von Originalobjekten aus der gespeicherten Zeichenfolgendarstellung. 

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

Wenn Sie Pickle nicht verwenden möchten, können Sie die Liste als Text speichern und dann auswerten:

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] Klassenliste 'Klasse' int '

[0, 1, 2, 3, 4, 5] Klassenliste 'Klasse' int '

6
Sarper Bilazer

pickle und andere Serialisierungspakete funktionieren. Schreiben Sie es in eine .py-Datei, die Sie dann importieren können.

>>> 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

Wenn Sie möchten, können Sie die Speicherfunktion von numpy verwenden, um die Liste als Datei zu speichern. Angenommen, Sie haben zwei Listen

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

hier ist die Funktion zum Speichern der Liste als Datei. Denken Sie daran, dass Sie die Erweiterung .npy beibehalten müssen

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

und hier ist die Funktion, um die Datei in eine Liste zu laden

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

ein funktionierendes Beispiel

>>> 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']
2
Manu Gond

Ich benutze 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)

Verwenden Sie dies, wenn Sie trotzdem Pandas für andere Berechnungen importieren.

0