2016-09-12 2 views
0

Ich schreibe ein Programm, das meine Schulmarke organisiert und für jedes Thema habe ich eine Datei erstellt.pck wo alle Markierungen dieses Themas gespeichert sind. Da ich öffnen und pickle.load 10+ Dateien habe ich beschlossen, zwei Funktionen zu machen, files_open():Öffnen und Schließen einer großen Anzahl von Dateien auf Python

subj1 = open(subj1_file) 
subj1_marks = pickle.load(subj1) 
subj2 = open(subj2_file) 
subj2marks = pickle.load(subj2) 

und file_close():

subj1.close() 
subj2.close() 

Das Problem ist, dass ich machen musste Jede Variable in file_open() global und die Funktion ist jetzt zu lang. Ich versuchte, dieses Problem durch Aufrufen von Variablen wie zu vermeiden:

file_open.subj1 

aber es funktioniert und ich kann nicht verstehen, warum.

+0

Können Sie Ihre Funktionen und Ihren Code veröffentlichen? Es ist schwer dir zu helfen, wenn wir nicht wissen, was du tust. – MooingRawr

+0

Warum lassen Sie die Dateien offen? Kannst du nicht sofort "öffnen", "pickle.load" & "close"? –

+0

Wenn Sie eine Menge ähnlicher Werte haben, für die die gleichen Operationen ausgeführt werden, sollten sie im Allgemeinen in einem einzigen Container (eher einer Liste oder einem Wörterbuch) als einzelnen Variablen stehen. Es ist einfach, über den Inhalt eines Containers zu iterieren, etwas mit einer Menge Variablen zu tun, kann nur durch Wiederholung von Code gemacht werden. – jasonharper

Antwort

1

da Sie wollen einfach nur öffnen, laden und schließen Sie die Datei danach würde ich eine einfache Hilfsfunktion vorschlagen:

def load_marks(filename): 
    with open(filename,"rb") as f: # don't forget to open as binary 
     marks = pickle.load(f) 
    return marks 

Verwendung wie folgt aus:

subj1_marks = load_marks(subj1_file) 

Die Datei geschlossen wird, wenn Ausgehen der Umfang von with Block, und Ihre Daten bleiben zugänglich, auch wenn die Datei geschlossen ist, die Ihre (ungerechtfertigte) Sorge mit Ihrer Frage sein kann.

Hinweis: Jemand hat vorgeschlagen, dass Sie (vielleicht) wirklich alle Daten in einer großen Pickle-Datei speichern möchten. In diesem Fall könnten Sie ein Wörterbuch mit Ihren Daten erstellen:

d = dict() 
d["mark1"] = subj1_marks 
d["mark2"] = subj2_marks 
... 

und führen Sie eine einzige pickle.dump() und pickle.load() auf dem Wörterbuch (wenn Daten ein Wörterbuch dieser Daten picklable ist, dann ist auch picklable): Das wäre einfacher zu handhaben 1 große Datei als viele von ihnen, bekannt, dass Sie sie alle sowieso brauchen.

+0

Willst du 'pickle.load (f)' nicht verwenden? –

+0

Got gefangen nicht meinen Code zu testen :) danke. klassischer Fehler. –

+0

Ich denke, dass das OP hier einige Hinweise zum Lernen über Python-Wörterbücher benötigt. Kannst du ihm helfen? – jsbueno

Verwandte Themen