plistlib — Generieren und Parsen von Apple .plist-Dateien¶
Quellcode: Lib/plistlib.py
Dieses Modul bietet eine Schnittstelle zum Lesen und Schreiben der von Apple verwendeten "Property List"-Dateien, hauptsächlich unter macOS und iOS. Dieses Modul unterstützt sowohl binäre als auch XML-Plist-Dateien.
Das Property List-Dateiformat (.plist) ist eine einfache Serialisierung, die grundlegende Objekttypen wie Wörterbücher, Listen, Zahlen und Zeichenketten unterstützt. Normalerweise ist das Top-Level-Objekt ein Wörterbuch.
Zum Schreiben und Parsen einer Plist-Datei verwenden Sie die Funktionen dump() und load().
Um mit Plist-Daten in Bytes- oder Zeichenkettenobjekten zu arbeiten, verwenden Sie dumps() und loads().
Werte können Zeichenketten, Ganzzahlen, Gleitkommazahlen, Booleans, Tupel, Listen, Wörterbücher (aber nur mit Zeichenketten-Schlüsseln), bytes, bytearray oder datetime.datetime-Objekte sein.
Geändert in Version 3.4: Neue API, alte API veraltet. Unterstützung für das binäre Format von Plists hinzugefügt.
Geändert in Version 3.8: Unterstützung für das Lesen und Schreiben von UID-Tokens in binären Plists hinzugefügt, wie sie von NSKeyedArchiver und NSKeyedUnarchiver verwendet werden.
Geändert in Version 3.9: Alte API entfernt.
Siehe auch
- PList Handbuchseite
Apples Dokumentation des Dateiformats.
Dieses Modul definiert die folgenden Funktionen
- plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)¶
Liest eine Plist-Datei. fp sollte ein lesbares und binäres Dateiobjekt sein. Gibt das entpackte Wurzelobjekt zurück (das normalerweise ein Wörterbuch ist).
Das Argument fmt ist das Format der Datei und die folgenden Werte sind gültig
None: Dateiformat automatisch erkennenFMT_XML: XML-DateiformatFMT_BINARY: Binäres Plist-Format
dict_type ist der Typ, der für Wörterbücher verwendet wird, die aus der Plist-Datei gelesen werden.
Wenn aware_datetime wahr ist, werden Felder vom Typ
datetime.datetimeals bewusstes Objekt erstellt, mittzinfoalsdatetime.UTC.XML-Daten für das
FMT_XML-Format werden mit dem Expat-Parser ausxml.parsers.expatgeparst – siehe dessen Dokumentation für mögliche Ausnahmen bei fehlerhaftem XML. Unbekannte Elemente werden vom Plist-Parser einfach ignoriert.Der Parser löst
InvalidFileExceptionaus, wenn die Datei nicht geparst werden kann.Hinzugefügt in Version 3.4.
Geändert in Version 3.13: Der Nur-Schlüsselwort-Parameter aware_datetime wurde hinzugefügt.
- plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)¶
Lädt eine Plist aus einem Bytes- oder Zeichenkettenobjekt. Siehe die Dokumentation für
load()für eine Erklärung der Schlüsselwortargumente.Hinzugefügt in Version 3.4.
Geändert in Version 3.13: data kann eine Zeichenkette sein, wenn fmt gleich
FMT_XMList.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
Schreibt value in eine Plist-Datei. fp sollte ein beschreibbares, binäres Dateiobjekt sein.
Das Argument fmt gibt das Format der Plist-Datei an und kann einer der folgenden Werte sein
FMT_XML: XML-formatiere Plist-DateiFMT_BINARY: Binär formatierte Plist-Datei
Wenn sort_keys wahr ist (Standardwert), werden die Schlüssel für Wörterbücher in sortierter Reihenfolge in die Plist geschrieben, andernfalls werden sie in der Iterationsreihenfolge des Wörterbuchs geschrieben.
Wenn skipkeys falsch ist (Standardwert), löst die Funktion
TypeErroraus, wenn ein Schlüssel eines Wörterbuchs keine Zeichenkette ist, andernfalls werden solche Schlüssel übersprungen.Wenn aware_datetime wahr ist und jedes Feld vom Typ
datetime.datetimeals bewusstes Objekt gesetzt ist, wird es vor dem Schreiben in die UTC-Zeitzone konvertiert.Eine
TypeErrorwird ausgelöst, wenn das Objekt einen nicht unterstützten Typ hat oder ein Container ist, der Objekte nicht unterstützter Typen enthält.Eine
OverflowErrorwird für Ganzzahlwerte ausgelöst, die nicht in (binären) Plist-Dateien dargestellt werden können.Hinzugefügt in Version 3.4.
Geändert in Version 3.13: Der Nur-Schlüsselwort-Parameter aware_datetime wurde hinzugefügt.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
Gibt value als Plist-formatiertes Bytes-Objekt zurück. Siehe die Dokumentation für
dump()für eine Erklärung der Schlüsselwortargumente dieser Funktion.Hinzugefügt in Version 3.4.
Die folgenden Klassen sind verfügbar
- class plistlib.UID(data)¶
Umschließt eine
int. Dies wird beim Lesen oder Schreiben von NSKeyedArchiver-kodierten Daten verwendet, die UID enthalten (siehe PList-Handbuch).- data¶
Int-Wert der UID. Er muss im Bereich
0 <= data < 2**64liegen.
Hinzugefügt in Version 3.8.
Die folgenden Konstanten sind verfügbar
- plistlib.FMT_XML¶
Das XML-Format für Plist-Dateien.
Hinzugefügt in Version 3.4.
- plistlib.FMT_BINARY¶
Das binäre Format für Plist-Dateien
Hinzugefügt in Version 3.4.
Das Modul definiert die folgenden Ausnahmen
- exception plistlib.InvalidFileException¶
Ausgelöst, wenn eine Datei nicht geparst werden kann.
Hinzugefügt in Version 3.4.
Beispiele¶
Generieren einer Plist
import datetime
import plistlib
pl = dict(
aString = "Doodah",
aList = ["A", "B", 12, 32.1, [1, 2, 3]],
aFloat = 0.1,
anInt = 728,
aDict = dict(
anotherString = "<hello & hi there!>",
aThirdString = "M\xe4ssig, Ma\xdf",
aTrueValue = True,
aFalseValue = False,
),
someData = b"<binary gunk>",
someMoreData = b"<lots of binary gunk>" * 10,
aDate = datetime.datetime.now()
)
print(plistlib.dumps(pl).decode())
Parsen einer Plist
import plistlib
plist = b"""<plist version="1.0">
<dict>
<key>foo</key>
<string>bar</string>
</dict>
</plist>"""
pl = plistlib.loads(plist)
print(pl["foo"])