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:
None
: Autodetektera filformatetFMT_XML
: XML-filformatFMT_BINARY
: Binärt plistformat
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, medtzinfo
somdatetime.UTC
.XML-data för
FMT_XML
-formatet analyseras med hjälp av Expat-parsern frånxml.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:
FMT_XML
: XML-formaterad plistfilFMT_BINARY
: Binärt formaterad plist-fil
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"])