plistlib
— Generate and parse Apple .plist
files¶
Código-fonte: Lib/plistlib.py
Este módulo fornece uma interface para ler e escrever os arquivos “property listas (lista de propriedades) usados pela Apple, principalmente no macOS e iOS. Este módulo tem suporte a arquivos plist binários e XML.
O formato de arquivo de lista de propriedades (.plist
) é uma serialização simples que oferece suporte a tipos básicos de objetos, como dicionários, listas, números e strings. Normalmente, o objeto de nível superior é um dicionário.
Para escrever e analisar um arquivo plist, use as funções dump()
e load()
.
Para trabalhar com dados plist em objetos bytes, use dumps()
e loads()
.
Os valores podem ser strings, inteiros, floats, booleanos, tuplas, listas, dicionários (mas somente com chaves de string), objetos bytes
, bytearray
ou datetime.datetime
.
Alterado na versão 3.4: Nova API, API antiga descontinuada. Suporte para plists de formato binário adicionado.
Alterado na versão 3.8: Adicionado suporte para leitura e escrita de tokens UID
em plists binários, conforme usado por NSKeyedArchiver e NSKeyedUnarchiver.
Alterado na versão 3.9: API antiga removida.
Ver também
- Pagina de manual de PList
Documentação da Apple sobre o formato de arquivo.
Este módulo define as seguintes funções:
- plistlib.load(fp, *, fmt=None, dict_type=dict)¶
Lê um arquivo plist. fp deve ser um objeto arquivo binário e legível. Retorna o objeto raiz desempacotado (que geralmente é um dicionário).
fmt é o formato do arquivo e os seguintes valores são válidos:
None
: Detecta automaticamente o formato do arquivoFMT_XML
: Formato de arquivo XMLFMT_BINARY
: Formato binário plist
O dict_type é o tipo usado para dicionários que são lidos do arquivo plist.
Dados XML para o formato
FMT_XML
são analisados usando o analisador sintático Expat dexml.parsers.expat
– veja sua documentação para possíveis exceções em XML malformado. Elementos desconhecidos serão simplesmente ignorados pelo analisador de plist.O analisador sintático para o formato binário levanta
InvalidFileException
quando o arquivo não pode ser analisado.Novo na versão 3.4.
- plistlib.loads(data, *, fmt=None, dict_type=dict)¶
Carrega um plist de um objeto bytes. Veja
load()
para uma explicação dos argumentos nomeados.Novo na versão 3.4.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶
Escreve value em um arquivo plist. Fp deve ser um objeto arquivo binário gravável.
O argumento fmt especifica o formato do arquivo plist e pode ser um dos seguintes valores:
FMT_XML
: Arquivo plist formatado em XMLFMT_BINARY
: Arquivo plist formatado em binário
Quando sort_keys é verdadeiro (o padrão), as chaves dos dicionários serão escritas ordenadas no plist, caso contrário, elas serão escritas na ordem de iteração do dicionário.
Quando skipkeys é falso (o padrão), a função levanta
TypeError
quando uma chave de um dicionário não é uma string, caso contrário, tais chaves são ignoradas.Uma
TypeError
será levantada se o objeto for de um tipo não suportado ou um contêiner que contém objetos de tipos não suportados.Uma
OverflowError
será levantada para valores inteiros que não podem ser representados em arquivos plist (binários).Novo na versão 3.4.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶
Retorna value como um objeto bytes formatado em plist. Veja a documentação para
dump()
para uma explicação dos argumentos nomeados desta função.Novo na versão 3.4.
As seguintes classes estão disponíveis:
- class plistlib.UID(data)¶
Envolve um
int
. Isso é usado ao ler ou escrever dados codificados NSKeyedArchiver, que contém UID (veja o manual de PList).Tem um atributo,
data
, que pode ser usado para recuperar o valor int do UID.data
deve estar no intervalo0 <= data < 2**64
.Novo na versão 3.8.
As seguintes constantes estão disponíveis:
- plistlib.FMT_XML¶
O formato XML para arquivos plist.
Novo na versão 3.4.
- plistlib.FMT_BINARY¶
O formato binário para arquivos plist
Novo na versão 3.4.
Exemplos¶
Gerando um 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())
Analisando um 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"])