Frage

Dies ist, was ich für ein Projekt gemacht habe. Ich habe ein paar Datenstrukturen, die bascially Wörterbücher mit einigen Methoden, die auf den Daten arbeiten. Wenn ich sie auf der Festplatte speichern, schreibe ich sie als Code zu Py Dateien heraus, dass, wenn es als Modul importiert werden die gleichen Daten in eine solche Datenstruktur laden.

Ist das sinnvoll? Gibt es große Nachteile? Der Vorteil, den ich sehe, ist, dass, wenn ich mit den gespeicherten Daten betrieben werden soll, kann ich schnell die Module importiert ich brauche. Auch können die Module seperate verwendet werden vom Rest der Anwendung, weil Sie keinen separaten Parser oder Loader-Funktionalität benötigen.

War es hilfreich?

Lösung

Es ist vernünftig, und ich tue es die ganze Zeit. Offensichtlich ist es nicht ein Format, das Sie zum Austausch von Daten verwenden, so dass es für so etwas wie eine Sicherungsdatei nicht ein gutes Format ist.

Aber zum Beispiel, wenn ich Migration von Websites, auf Plone tun, bekomme ich oft Daten über die Website (wie eine Liste, welche Seiten migriert werden sollen, oder eine Liste, wie alt Urls sollte neue abgebildet wird, AOR Listen-Tags). Diese Sie erhalten in der Regel in Word och Excel-Format. Auch die Daten oft ein bisschen braucht massiert, und ich am Ende mit dem, was für alle Absichten und Zwecke sind ein Wörterbücher Zuordnung einer URL zu einigen anderen Informationen.

Sicher, ich könnte außer dem, wie CVS, und in ein Wörterbuch parsen. Aber anstatt normalerweise ich es als eine Python-Datei mit einem Wörterbuch speichern. Speichert Code.

Also, ja, es ist vernünftig, nein, es ist kein Format, das Sie für jede Art von Datei speichern verwenden sollten. Es ist jedoch häufig für Daten verwendet, die über die Grenze nach Konfiguration spreizen, wie oben.

Andere Tipps

Mit dem auf diese Weise arbeitet, kann man etwas gewisses Maß an Bequemlichkeit gewinnen, aber Sie zahlen viele Arten von Preis dafür. Der Raum braucht, um Ihre Daten zu speichern, und die Zeit es braucht, um beide speichern und erneut zu laden, gehen Sie auf im Wesentlichen; und Ihr Sicherheitsrisiko ist unbegrenzt - Sie müssen grimmig schützen die Pfade, von denen Ihnen Module nachladen, da es einen einfachen Weg für jeden Angreifer einzuspritzen Code seiner Wahl unter Ihrer Benutzer-ID ausgeführt werden liefern würde (pickle selbst nicht rock-solid Sicherheit-weise, aber im Vergleich zu dieser Anordnung ist es scheint, -).

Alles in allem ziehe ich eine einfachere und traditionelle Anordnung: ausführbarer Code lebt in einem Modul (auf einem typischen Code-Ladepfad, der nicht notwendigerweise R / W sein, sobald die Modul kompiliert) - es wird geladen nur einmal und von einer bereits kompilierter Form. Live-Daten in ihre eigenen Dateien (oder Teile von DB, etc.) in einem der vielen geeigneten Formaten, meist Standard diejenigen (möglicherweise einschließlich mehrsprachiger diejenigen wie JSON, CSV, XML, ... usw, wenn ich behalten wollen die Option offen, leicht derjenigediejenigedasjenige Daten aus anderen Sprachen in Zukunft laden).

Der größte Nachteil ist, dass es ein potenzielles Sicherheitsproblem ist, da es schwer zu garantieren ist, dass die Dateien nicht beliebigen Code enthält, die wirklich schlecht sein könnten. Also nicht diesen Ansatz verwenden, wenn jemand anderes als Sie Schreibzugriff auf die Dateien haben.

Eine vernünftige Option könnte die Pickle Modul zu verwenden sein, die speziell entwickelt wurde, zum speichern und wiederherstellen python Strukturen auf der Festplatte.

Alex Martelli Antwort ist absolut aufschlussreich und ich stimme ihm zu. Allerdings werde ich einen Schritt weiter gehen und eine spezifische Empfehlung machen. Verwendung JSON

JSON ist einfach, und Python-Datenstrukturen abbilden gut hinein; und es gibt mehrere Standardbibliotheken und Werkzeuge für die mit JSON zu arbeiten. Das json Modul in Python 3.0 und neueren basiert auf simplejson , so dass ich simplejson verwenden würde in Python 2.x und json in Python 3.0 und neuer.

Zweite Wahl ist XML. XML ist komplizierter und schwieriger zu einfach Blick auf (oder nur bearbeiten mit einem Texteditor), aber es gibt eine große Fülle von Werkzeugen es zu validieren, filtern, bearbeiten Sie es, etc.

Auch wenn Ihre Daten Speicherung und den Abruf Bedürfnisse bei allen nicht-trivialen werden, sollten Sie eine aktuelle Datenbank. SQLite ist grandios: es ist klein, und für kleine Datenbanken läuft sehr schnell, aber es ist eine echte tatsächliche SQL-Datenbank. Ich würde auf jeden Fall eine Python ORM verwenden, anstatt SQL mit der Datenbank zu interagieren zu lernen; mein Lieblings ORM für SQLite wäre Herbst (klein und einfach) oder die ORM von Django (Sie brauchen noch nicht einmal zu lernen, wie Tabellen in SQL erstellen!) Dann, wenn Sie jemals outgrow SQLite, können Sie bewegen bis zu einer echten Datenbank wie PostgreSQL . Wenn Sie sich eine Menge Schleifen, die Suche durch die gespeicherten Daten zu schreiben, und vor allem, wenn Sie Abhängigkeiten erzwingen müssen (wie wenn foo gelöscht, bar muss auch gelöscht werden) betrachten zu einer Datenbank gehen.

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