Gibt es eine einfache Möglichkeit, ein Python tempfile in einem Regal zu verwenden (und stellen Sie sicher, es reinigt sich nach oben)?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

Frage

Im Grunde möchte ich eine unendliche Größe (genauer gesagt, Festplatte, anstatt Speicher gebunden) dict in einem Python-Programm ich schreibe. Es scheint, wie die temporären Dateien und ad acta Module natürlich dafür geeignet ist, aber ich kann nicht sehen, wie sie auf sichere Weise gemeinsam zu nutzen. Ich mag, dass die temporären Dateien gelöscht werden, wenn das Regal ist GCed (oder bei Garantie Löschung nach dem shelve außer Betrieb ist, unabhängig davon, wann), aber die einzige Lösung, die ich mit oben kommen kann hierfür mit tempfile.TemporaryFile beinhaltet () zu öffnen ein Datei-Handle, den Dateinamen aus dem Griff bekommen, diesen Dateinamen verwenden für eine shelve Öffnen, den Verweis auf die Datei-Handle zu halten, damit er nicht GCed bekommen (und die Datei gelöscht), und dann eine Hülle auf dem Regal stellen, die diese speichert Referenz. Wer eine bessere Lösung als diese gewundenen Durcheinander?

Einschränkungen:. Können nur die Standard-Python-Bibliothek verwenden und müssen vollständig Cross-Plattform sein

War es hilfreich?

Lösung

Ich würde eher von shelve.Shelf erben und überschreiben die Methode close (*), um die Dateien zu entkoppeln. Beachten Sie, dass, abhängig von dem spezifischen dbm-Modul verwendet wird, können Sie mehr als eine Datei, die das Regal enthält. Eine Lösung könnte sein, ein temporäres Verzeichnis zu erstellen, anstatt eine temporäre Datei, und entfernen Sie alles in dem Verzeichnis, wenn Sie fertig. Die andere Lösung zu einem bestimmten dbm-Modul binden würde (sagen wir, bsddb oder dumbdbm), und entfernen Sie speziell die Dateien, die diese Bibliotheken erstellen.

(*) Hinweis, dass die enge Methode eines Regal auch aufgerufen, wenn das Regal Müll gesammelt ist. Der einzige Fall, wie Sie mit Müll-Dateien könnten am Ende ist, wenn der Dolmetscher abstürzt oder getötet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top