14.5 Plistlib 8212 Mac OS X. plist-Dateien erstellen und analysieren Dieses Modul bietet eine Schnittstelle zum Lesen und Schreiben der 8220property list8221 Dateien, die hauptsächlich von Mac OS X verwendet werden und unterstützt sowohl Binär - als auch XML-Plist-Dateien. Die Eigenschaftsliste (.plist) Dateiformat ist eine einfache Serialisierung, die grundlegende Objekttypen wie Wörterbücher, Listen, Zahlen und Strings unterstützt. Normalerweise ist das Top-Level-Objekt ein Wörterbuch. Um eine Plist-Datei zu schreiben und zu analysieren, verwenden Sie die Funktionen dump () und load (). Um mit Plist-Daten in Bytes-Objekten zu arbeiten, verwenden Sie Dumps () und Lasten (). Werte können Strings, Integer, Floats, Booleans, Tupel, Listen, Wörterbücher (aber nur mit String-Tasten), Data. Bytes Bytesarray oder datetime. datetime Objekte. Geändert in Version 3.4: Neue API, alte API abgelehnt. Unterstützung für Binärformat-Plisse hinzugefügt. PLUA manuelle Seite Apple8217s Dokumentation des Dateiformats. Dieses Modul definiert die folgenden Funktionen: Lesen Sie eine Plist-Datei. Fp sollte ein lesbares und binäres Dateiobjekt sein. Gib das unverpackte Root-Objekt zurück (was normalerweise ein Wörterbuch ist). Das fmt ist das Format der Datei und die folgenden Werte sind gültig: Wenn usebuiltintypes wahr ist (die Voreinstellung) werden Binärdaten als Instanzen von Bytes zurückgegeben. Andernfalls wird es als Instanzen von Daten zurückgegeben. Der Diktotyp ist der Typ, der für Wörterbücher verwendet wird, die aus der Plistdatei gelesen werden. Die genaue Struktur des Plists kann durch die Verwendung von Sammlungen wiederhergestellt werden. OrderedDict (obwohl die Reihenfolge der Schlüssel sollte nicht in Plist-Dateien wichtig sein). XML-Daten für das FMTXML-Format werden mit dem Expat-Parser aus xml. parsers. expat 8211 analysiert, siehe seine Dokumentation für mögliche Ausnahmen von schlecht geformtem XML. Unbekannte Elemente werden einfach vom Plist-Parser ignoriert. Der Parser für das Binärformat erhöht InvalidFileException, wenn die Datei nicht analysiert werden kann. Neu in Version 3.4. Laden Sie einen Plist aus einem Bytes-Objekt. Siehe load () für eine Erläuterung der Keyword-Argumente. Neu in Version 3.4. Schreibe Wert in eine Plist-Datei. Fp sollte ein beschreibbares, binäres Dateiobjekt sein. Das fmt-Argument spezifiziert das Format der Plist-Datei und kann einer der folgenden Werte sein: Wenn Sortierzeichen wahr sind (die Voreinstellung), werden die Schlüssel für Wörterbücher in sortierter Reihenfolge in den Plist geschrieben, sonst werden sie in der Iterationsreihenfolge geschrieben Des Wörterbuchs. Wenn skipkeys falsch ist (die Voreinstellung), hebt die Funktion TypeError auf, wenn ein Schlüssel eines Wörterbuchs kein String ist, sonst werden solche Schlüssel übersprungen. Ein TypError wird angehoben, wenn das Objekt von einem nicht unterstützten Typ oder einem Container ist, der Objekte von nicht unterstützten Typen enthält. Ein OverflowError wird für ganzzahlige Werte angehoben, die nicht in (binären) Plist-Dateien dargestellt werden können. Neu in Version 3.4. Rückgabewert als plist-formatiertes Bytes-Objekt. Siehe die Dokumentation für dump () für eine Erläuterung der Keyword-Argumente dieser Funktion. Neu in Version 3.4. Die folgenden Funktionen sind veraltet: plistlib. ReadPlist (pathOrFile) Lesen Sie eine Plist-Datei. PathOrFile kann entweder ein Dateiname oder ein (lesbares und binäres) Dateiobjekt sein. Gibt das ausgepackte Root-Objekt zurück (was normalerweise ein Wörterbuch ist). Diese Funktion ruft load () auf, um die eigentliche Arbeit zu machen, siehe die Dokumentation dieser Funktion zur Erläuterung der Keyword-Argumente. Dict-Werte im Ergebnis haben eine getattr-Methode, die sich auf Getitem verteidigt. Dies bedeutet, dass Sie den Zugriff auf Attribute dieser Wörterbücher verwenden können. Abgegeben seit Version 3.4: Verwenden Sie load () stattdessen. Plistlib WritePlist (rootObject. PathOrFile) Schreiben Sie rootObject in eine XML-Plist-Datei. PathOrFile kann entweder ein Dateiname oder ein (beschreibbares und binäres) Dateiobjekt sein, das seit Version 3.4 veraltet ist: Verwenden Sie stattdessen dump (). Plistlib ReadPlistFromBytes (data) Lesen von Plist-Daten aus einem Bytes-Objekt. Gib das Wurzelobjekt zurück. Siehe load () für eine Beschreibung der Keyword-Argumente. Dict-Werte im Ergebnis haben eine getattr-Methode, die sich auf Getitem verteidigt. Dies bedeutet, dass Sie den Zugriff auf Attribute dieser Wörterbücher verwenden können. Abgelegt seit Version 3.4: Verwenden Sie Lasten () stattdessen. Plistlib WritePlistToBytes (rootObject) Wenden Sie rootObject als XML-Plist-formatiertes Bytes-Objekt an. Abgegeben seit Version 3.4: Verwenden Sie stattdessen Dumps (). Folgende Klassen stehen zur Verfügung: Geben Sie eine erweiterte Mapping-Objekt mit dem gleichen Wert wie Wörterbuch dict. Diese Klasse ist eine Unterklasse von dict, wo Attribut Zugriff verwendet werden kann, um Elemente zugreifen. Das heißt, aDict. key ist das gleiche wie aDictkey zum Abrufen, Löschen und Löschen von Elementen in der Zuordnung. Seit Version 3.0 veraltet. Geben Sie ein 8220data8221-Wrapperobjekt um die Byte-Objektdaten zurück. Dies wird in Funktionen verwendet, die von Plisten umwandeln, um den in Plisten verfügbaren ltdatagt-Typ darzustellen. Es hat ein Attribut, Daten. Das kann verwendet werden, um das in ihm gespeicherte Python-Bytes-Objekt abzurufen. Abgegeben seit Version 3.4: Verwenden Sie stattdessen ein Bytes-Objekt. Folgende Konstanten stehen zur Verfügung: Das XML-Format für plist files. Mailing List Archiv Post 8 von 9 (946 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: Wiedereröffnung, weil sich Kakao anders verhält, was ich früher bemerkt hatte. Der (Objective-C) Code unterhalb serialisiert ein NSDictionary mit einem unsigned long of value ULLONGMAX und liest es dann zurück. Ich hatte erwartet, dass der wiederhergestellte Wert eine negative Zahl enthielt, aber es liest tatsächlich den richtigen Wert zurück. Ich werde ein paar Spelunking machen, um herauszufinden, was hier los ist, und wird den Plistlib-Code anpassen, um alle Werte von unsignierten 64-Bit-Integern vollständig zu repräsentieren (wahrscheinlich basierend auf deinem Code für die Unterstützung von 128-Bit-Integern) Output (auf einem 64 - bit-System mit OSX 10.9):.demo 2014-01-15 15: 34: 18.196 demo77580: 507 Eingabewörterbuch: Schlüssel 18446744073709551615 Wert 18446744073709551615 2014-01-15 15: 34: 18.198 demo77580: 507 als binärer plist: lt62706c69 73743030 d1010253 6b657914 00000000 00000000 ffffffff ffffffff 080b0f00 00000000 00010100 00000000 000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000 int main (void) NSAutoreleasePool Pool NSAutoreleasePool alloc init NSNumber Wert NSNumber numberWithUnsignedLongLong: ULLONGMAX NSDictionary dict NSDictionary dictionaryWithObjectsAndKeys: Wert, Schlüssel, nil NSLog (Eingang Wörterbuch: Wert llu, dict, ULLONGMAX) NSData serialisiert NSPropertyListSerialization dataWithPropertyList: dict Format: NSPropertyListBinaryFormatv10 Optionen: 0 Fehler: nil NSLog (als binärer Plist:, serialisiert) NSDictionary wiederhergestellt NSPropertyListSerialization propertyListWithData: serialisierte Optionen: 0 Format: nil error: nil NSLog (Wiederherstellung als wiederhergestellt) return 0 Python Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python - bugs-list mailing list Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage, json und binäre plist-Dateien zu lesen In Antwort auf issue14455 plistlib nicht in der Lage, json und binäre plist-Dateien zu lesen Ronald Oussoren Fügte den Kommentar hinzu: v3 ist immer noch ein work in progress, und schlägt immer noch einige Tests aus Ersetzte Testdaten durch Daten, die von einem Helfer-Skript generiert werden (um es einfacher zu aktualisieren) Verwenden Sie 39subtest39 Feature von unittest Bibliothek in 3.4 Kleine Tweaks zu plist Bibliothek (die Dumploaddumpsloads Funktion am Ende vermutlich won39t überleben) Aktualisierter Link zum CFBinaryPlist. c Quellcode (dies sollte eine neuere Version der Datei sein) Added Option zum readPlist, um den Wörterbuchtyp zu übergeben (standardmäßig auf plistlib. InternalDict). Dies ist vor allem nützlich für das Testen und Debuggen, aber auch spiegelt die 39sortkeys39 Keyword-Argument für den Schriftsteller (wenn die Bestellung kann wichtig für das Schreiben der Benutzer sollte eine Möglichkeit, die Reihenfolge beim Lesen zu erkennen). Die Daten, die vom Binär-Plist-Generator erzeugt werden, entsprechen nicht den Daten, die von Cocoa in OSX 10.8 erzeugt wurden (und vom Helper-Skript generiert wurden), habe ich dieses Problem noch nicht vollständig ausgewertet. Der generierte Binär-Plist und die Cocoa-Version können beide von plistlib analysiert werden und führen zu derselben Datenstruktur Python Tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren hat den Kommentar hinzugefügt: Siehe auch: 18168: request for the sortkeys option 11101 : Anforderung für eine Option, 39None39 Werte beim Schreiben von 9256 zu ignorieren: datetime. datetime Objekte, die von plistlib erstellt wurden don39t enthält Zeitzoneninformationen (und das Betrachten des Codes I39d sagen, dass Zeitzonen beim Schreiben von Plist-Dateien ignoriert werden) 10733: Apple39s plist kann fehlerhaft erstellen XML (Steuerzeichen) als nicht von plistlib gelesen werden ---------- Python Ronald Oussoren hat den Kommentar hinzugefügt: Die fünfte Version des Patches sollte viel sauberer sein. Coding Style Cleanup, der neue Code verwendet PEP8 konforme Namen für Methoden und Variablen. Explizit privatklassen privat machen, indem sie ihren Namen mit einem Unterstrich voranstellen (einschließlich der alten XML-Parsergenerator-Klassen) Unterstützung im Binär-Plist-Code für Sets und Uuids entfernen und kann auch nicht von Apple39s-Code in Dateien geschrieben werden. Es gibt keine Unterstützung für JSON, weil JSON nicht von Apple39s possylist APIs unterstützt wird. Die Befehlszeilen-Tool-Plutil unterstützt JSON-Ausgabe, aber die C - und Objective-C-APIs nicht. Es gibt keine Unterstützung für das alte OpenStep-Format. Dieses Format ist schlecht dokumentiert, wurde für eine lange Zeit veraltet, und das Schreiben wird nicht von Apple39s plist Bibliotheken unterstützt. Das OpenStep-Format scheint auch viel begrenzter zu sein als die beiden modernen. Der Patch enthält Plistlib. Die die gleichnamigen Funktionen aus den Pickle - und Json-Modulen spiegeln. Ist es sinnvoll, diese Funktionen zu plistlib hinzuzufügen und die älteren Funktionen zu verwerfen Vorteile: Cleaner API Bietet einen sauberen Pfad zu entfernen plistlib. Data und plistlib. InternalDict (das letztere ist bereits veraltet) Nachteile: - Sehr (auch) in der Nähe von unnötigen Code Churn Umbenennen PlistParser und PlistWriter ok Beide sind privat und eine schnelle Suche auf Google scheint zu zeigen, dass niemand Verzeichnis diese Klassen verwendet. Wenn Umbenennen in Ordnung ist, sollten Methodenvariablen in PEP8-Stil umbenannt werden Sollte ein 39default39-Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (simular zum Schlüsselwort in json. dump) Ich habe keinen Gebrauchfall dafür, der einzige Grund, hinzuzufügen ist, ist Konsistenz mit dem Json-Modul Sollte ein 39skipvalues39-Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (um Werte zu ignorieren, die nicht serialisiert werden können, siehe 11101) I39m nicht davon überzeugt, dass dies eine gute Idee wäre. Sollte ein 39checkcircular39-Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (wieder ähnlich dem gleichen Schlüsselwort für json. dump), würde dies vermeiden, sich auf die Rekursionsgrenze zu verlassen, um unendliche Schleifen zu brechen, wenn sie zirkuläre Datenstrukturen serialisieren. Möchten Sie überprüfen, ob Binär-Plist zirkuläre Datenstrukturen enthalten kann, wenn sie mit Apple39s-Bibliotheken geschrieben werden. Python-Tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren fügte den Kommentar hinzu: Ich beabsichtige, meine letzte Version des Patches während der europython Sprints zu begehen, mit einer kleinen Änderung: Don39t gehören Dump (s) und Last (s), dass Ändern (und die anderen Artikel auf quotopen Ausgaben in meinem letzten Beitrag) können später angesprochen werden. ---------- Python Tracker Mailing List Archiv Ronald Oussoren hat den Kommentar hinzugefügt: Ive legte issue14455-v2.txt mit einem aktualisierten Patch an. Der Patch ist immer noch sehr viel Arbeit im Gange, ich hatte so viel Zeit, daran zu arbeiten, wie Id wie. Diese Version: Sollte sich sauber an die Spitze des Default-Zweigs wenden, um einen Code umzugehen. Vermittelt keine Unit-Tests (meistens, weil Ive die manuelle Verschmelzung verpatzt hat). Die unittests decken auch nicht die Funktionalität ab, die ich hinzugefügt habe. Fügt Skript - und Sortierfelder zu den Schreibfunktionen hinzu (mit der gleichen Semantik wie diese Schlüsselwörter mit json. dump) Fügt den Lesefunktionen dataasbytes hinzu. Dann ist diese Option wahr, binäre Daten werden als Instanz von Bytes anstelle von plistlib. Data zurückgegeben. Letzteres ist immer noch die Voreinstellung. Python-Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage, json und binäre plist-Dateien zu lesen In Antwort von Jun 10, 2013, 5:06 AM Post 2 von 7 (118 Aufrufe) Änderungen von Ronald Oussoren ltronaldoussorenmacgt: Python-Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. Anmailmanoptionspython-Bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage zu lesen json und binäre plist Dateien In Antwort auf 10.06.2003, 5:13 Post 3 von 7 (120 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: V3 ist immer noch ein work in progress, und schlägt noch einige Tests aus Ersetzte Testdaten durch Daten, die von einem Helfer-Skript generiert werden (um es einfacher zu aktualisieren) Verwenden Sie subtest Feature von unittest Bibliothek in 3.4 Kleine Tweaks zu plist Bibliothek (die dumploaddumpsloads Funktion an der Ende vermutlich nicht überleben) Aktualisierter Link zum CFBinaryPlist. c Quellcode (das sollte eine neuere Version der Datei sein) Zusätzliche Option zum readPlist, um den Wörterbuchtyp zu übergeben (standardmäßig auf plistlib. InternalDict). Dies ist vor allem nützlich für das Testen und Debugging, sondern spiegelt auch die Sortkey-Keyword-Argument für den Schreiber (wenn die Bestellung wichtig sein kann für das Schreiben der Benutzer sollte eine Möglichkeit, die Reihenfolge beim Lesen zu erkennen). Die Daten, die durch den Binär-Plist-Generator erzeugt werden, stimmen mit den von Cocoa in OSX 10.8 erzeugten Daten überein (und durch das Helfer-Skript generiert), habe ich dieses Problem noch nicht vollständig ausgewertet. Der generierte Binär-Plist und die Cocoa-Version können beide von plistlib analysiert werden und führen zu derselben Datenstruktur Python Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython - Bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage zu lesen json und binäre plist Dateien In Antwort auf Jun 10, 2013, 5:23 AM Post 4 von 7 (118 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: 18168: Anfrage Für die Sortier-Option 11101: Anforderung für eine Option zu ignorieren Keine Werte beim Schreiben 9256: datetime. datetime Objekte, die von plistlib erstellt werden, enthalten keine Zeitzoneninformationen (und das Betrachten des Code-Ids sagen, dass Zeitzonen beim Schreiben von Plist-Dateien ignoriert werden) 10733: Äpfel plist kann fehlerhafte XML (Steuerzeichen) erstellen, als von plistlib nicht gelesen werden kann Pythontracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python - Bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage, json und binäre plist Dateien zu lesen In Antwort auf 10.06.2004, 8:12 Post 5 von 7 (115 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: Der Testversagen Im immer wird durch eine verursacht Unterschied in der Reihenfolge, in der Artikel in das Archiv geschrieben werden. Ich arbeite an einem Fix. Python-Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage, json und binäre plist-Dateien zu lesen In Antwort auf 10.06.2009, 09:23 Post 6 von 7 (117 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: v4 übergibt die enthaltenen Tests. Die Testsuite ist noch nicht fertig. Python-Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib nicht in der Lage, json und binäre plist-Dateien zu lesen In Antwort auf Jun 11, 2013, 1:40 AM Post 7 von 7 (129 Aufrufe) Ronald Oussoren hat den Kommentar hinzugefügt: Die fünfte Version des Patches sollte viel sauberer sein. Coding Style Cleanup, der neue Code verwendet PEP8 konforme Namen für Methoden und Variablen. Explizit private Klassen privat durch Präfixieren ihres Namens mit einem Unterstrich (einschließlich der alten XML-Parsergenerator-Klassen) Entfernen Sie die Unterstützung im Binär-Plist-Code für Sets und Uuids, und Sie können auch nicht in Plist-Dateien nach Apples-Code geschrieben werden. Es gibt keine Unterstützung für JSON, da JSON auch nicht von Apples possylist APIs unterstützt wird. Die Befehlszeilen-Tool-Plutil unterstützt JSON-Ausgabe, aber die C - und Objective-C-APIs nicht. Es gibt keine Unterstützung für das alte OpenStep-Format. Dieses Format ist schlecht dokumentiert, wurde seit langem veraltet, und das Schreiben wird nicht von Apples plist Bibliotheken unterstützt. Das OpenStep-Format scheint auch viel begrenzter zu sein als die beiden modernen. Der Patch enthält Plistlib. Die die gleichnamigen Funktionen aus den Pickle - und Json-Modulen spiegeln. Ist es sinnvoll, diese Funktionen zu plistlib hinzuzufügen und die älteren Funktionen zu verwerfen Vorteile: Cleaner API Bietet einen sauberen Pfad zu entfernen plistlib. Data und plistlib. InternalDict (das letztere ist bereits veraltet) Nachteile: - Sehr (auch) in der Nähe von unnötigen Code Churn Umbenennen PlistParser und PlistWriter ok Beide sind privat und eine schnelle Suche auf Google scheint zu zeigen, dass niemand Verzeichnis diese Klassen verwendet. Wenn die Umbenennung in Ordnung ist, sollten Methodenvariablen in PEP8-Stil umbenannt werden Sollte ein Standard-Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (simular zum Schlüsselwort in json. dump) Ich habe kein Usecase dafür, der einzige Grund zum Hinzufügen ist die Konsistenz mit dem Json-Modul Sollte ein skipvalues-Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (um Werte zu ignorieren, die nicht serialisiert werden können, siehe 11101) Ich bin nicht davon überzeugt, dass dies eine gute Idee wäre. Sollte ein checkcircular Schlüsselwort zu den Serialisierungsfunktionen hinzugefügt werden (wieder ähnlich dem gleichen Schlüsselwort für json. dump) Dies würde vermeiden, auf die Rekursionsgrenze zu verzichten, um unendliche Schleifen zu brechen, wenn serialisieren kreisförmige datastructures. Möchten Sie überprüfen, ob Binär-Plist zirkuläre Datenstrukturen enthalten kann, wenn sie mit Apples-Bibliotheken geschrieben werden. Python-Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-Bugs-Liste Mailingliste Abmelden: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads
No comments:
Post a Comment