plistlib — Generera och analysera Apples .plist-filer

Källkod: Lib/plistlib.py


Den här modulen ger ett gränssnitt för att läsa och skriva de ”property list”-filer som används av Apple, främst på macOS och iOS. Modulen stöder både binära och XML plist-filer.

Egenskapslistan (.plist) filformat är en enkel serialisering som stöder grundläggande objekttyper, som ordböcker, listor, siffror och strängar. Vanligtvis är objektet på högsta nivå en ordbok.

För att skriva ut och analysera en plist-fil använder du funktionerna dump() och load().

Om du vill arbeta med plistdata i byte eller strängobjekt använder du dumps() och loads().

Värdena kan vara strängar, heltal, flyttal, booleaner, tupler, listor, dictionaries (men endast med strängnycklar), bytes, bytearray eller datetime.datetime-objekt.

Ändrad i version 3.4: Nytt API, gammalt API utrangerat. Stöd för plistor i binärt format har lagts till.

Ändrad i version 3.8: Stöd har lagts till för att läsa och skriva UID-tokens i binära plistor som används av NSKeyedArchiver och NSKeyedUnarchiver.

Ändrad i version 3.9: Gammalt API borttaget.

Se även

Manualsida för PList

Apples dokumentation av filformatet.

Denna modul definierar följande funktioner:

plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)

Läser en plist-fil. fp bör vara ett läsbart och binärt filobjekt. Returnera det uppackade rotobjektet (som vanligtvis är en ordbok).

fmt är filens format och följande värden är giltiga:

dict_type är den typ som används för ordböcker som läses från plist-filen.

När aware_datetime är true kommer fält av typen datetime.datetime att skapas som aware object, med tzinfo som datetime.UTC.

XML-data för FMT_XML-formatet analyseras med hjälp av Expat-parsern från xml.parsers.expat – se dess dokumentation för möjliga undantag för missformad XML. Okända element kommer helt enkelt att ignoreras av plist-parsern.

Parsern ger InvalidFileException när filen inte kan analyseras.

Tillagd i version 3.4.

Ändrad i version 3.13: Parametern aware_datetime har lagts till som nyckelord.

plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)

Laddar en plist från ett bytes- eller strängobjekt. Se load() för en förklaring av nyckelordsargumenten.

Tillagd i version 3.4.

Ändrad i version 3.13: data kan vara en sträng när fmt är lika med FMT_XML.

plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)

Skriv värde till en plist-fil. fp ska vara ett skrivbart, binärt filobjekt.

Argumentet fmt anger formatet för plist-filen och kan vara ett av följande värden:

När sort_keys är true (standard) skrivs nycklarna för ordböcker till plistan i sorterad ordning, annars skrivs de i ordbokens iterationsordning.

När skipkeys är false (standard) ger funktionen upphov till TypeError när en nyckel i en ordbok inte är en sträng, annars hoppas sådana nycklar över.

När aware_datetime är true och ett fält av typen datetime.datetime är inställt som ett aware object, kommer det att konverteras till UTC-tidszon innan det skrivs.

Ett TypeError kommer att uppstå om objektet är av en typ som inte stöds eller en behållare som innehåller objekt av typer som inte stöds.

Ett OverflowError kommer att uppstå för heltalsvärden som inte kan representeras i (binära) plist-filer.

Tillagd i version 3.4.

Ändrad i version 3.13: Parametern aware_datetime har lagts till som nyckelord.

plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)

Returnerar värde som ett bytesobjekt i plistformat. Se dokumentationen för dump() för en förklaring av nyckelordsargumenten för denna funktion.

Tillagd i version 3.4.

Följande klasser finns tillgängliga:

class plistlib.UID(data)

Omsluter en int. Detta används vid läsning eller skrivning av NSKeyedArchiver-kodade data, som innehåller UID (se PList-manualen).

data

Int-värde för UID. Det måste ligga inom intervallet 0 <= data < 2**64.

Tillagd i version 3.8.

Följande konstanter finns tillgängliga:

plistlib.FMT_XML

XML-formatet för plist-filer.

Tillagd i version 3.4.

plistlib.FMT_BINARY

Det binära formatet för plist-filer

Tillagd i version 3.4.

Modulen definierar följande undantag:

exception plistlib.InvalidFileException

Utlöses när en fil inte kan tolkas.

Tillagd i version 3.4.

Exempel

Generering av en 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())

Parsning av en 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"])