Tuesday 7 May 2019

Plistlib opções binárias


14.5. Plistlib 8212 Gerar e analisar arquivos Mac OS X. plist Este módulo fornece uma interface para ler e gravar os arquivos 8220property list8221 usados ​​principalmente pelo Mac OS X e oferece suporte a arquivos binários e XML plist. O formato de arquivo da lista de propriedades (.plist) é uma serialização simples que suporta 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, flutuadores, booleanos, tuplas, listas, dicionários (mas somente com chaves de caracteres), Dados. Bytes. Bytesarray ou datetime. datetime objects. Alterado na versão 3.4: Nova API, antiga API obsoleta. Suporte para formatos de formato binário adicionado. PList manual da página Apple8217s documentação do formato do arquivo. Este módulo define as seguintes funções: Leia um arquivo plist. O fp deve ser um objeto de arquivo legível e binário. Retorne o objeto raiz desempacotado (que geralmente é um dicionário). O fmt é o formato do arquivo e os seguintes valores são válidos: se usebuiltintypes for verdadeiro (o padrão), os dados binários serão retornados como instâncias de bytes. Caso contrário, ele é retornado como instâncias de Dados. O dictado é o tipo usado para dicionários que são lidos a partir do arquivo plist. A estrutura exata do plist pode ser recuperada usando collections. OrderedDict (embora a ordem das chaves não seja importante nos arquivos plist). Os dados XML para o formato FMTXML são analisados ​​usando o analisador Expat de xml. parsers. expat 8211, veja sua documentação para possíveis exceções no XML mal formado. Elementos desconhecidos simplesmente serão ignorados pelo analisador de plist. O analisador para o formato binário aumenta InvalidFileException quando o arquivo não pode ser analisado. Novo na versão 3.4. Carregue um plist de um objeto bytes. Veja load () para uma explicação dos argumentos da palavra-chave. Novo na versão 3.4. Escreva um valor para um arquivo plist. Fp deve ser um objeto de arquivo binário, gravável. O argumento fmt especifica o formato do arquivo plist e pode ser um dos seguintes valores: quando as chaves são verdadeiras (o padrão), as chaves para dicionários serão escritas no plist em ordem ordenada, caso contrário serão escritas na ordem de iteração Do dicionário. Quando skipkeys é falso (o padrão), a função aumenta TypeError quando uma chave de um dicionário não é uma string, caso contrário, essas chaves são ignoradas. Um TypeError será gerado se o objeto for de um tipo não suportado ou um contêiner que contenha objetos de tipos não suportados. Um OverflowError será gerado para valores inteiros que não podem ser representados nos arquivos (binary) plist. Novo na versão 3.4. Retorna o valor como um objeto bytes formatado. Consulte a documentação para dump () para obter uma explicação dos argumentos da palavra-chave desta função. Novo na versão 3.4. As seguintes funções são obsoletas: plistlib. ReadPlist (pathOrFile) Leia um arquivo plist. PathOrFile pode ser um nome de arquivo ou um objeto de arquivo (legível e binário). Retorna o objeto raiz desempacotado (que geralmente é um dicionário). Esta função chama load () para fazer o trabalho real, veja a documentação dessa função para uma explicação dos argumentos da palavra-chave. Dict valores no resultado têm um método getattr que desafia getitem. Isso significa que você pode usar o acesso de atributo para acessar itens desses dicionários. Desativado desde a versão 3.4: use o load () em vez disso. Plistlib. WritePlist (rootObject. PathOrFile) Escreva rootObject em um arquivo XML plist. PathOrFile pode ser um nome de arquivo ou um objeto de arquivo (gravável e binário) Desativado desde a versão 3.4: Use dump () em vez disso. Plistlib. ReadPlistFromBytes (dados) Leia os dados do plist de um objeto bytes. Retorne o objeto raiz. Veja load () para uma descrição dos argumentos da palavra-chave. Dict valores no resultado têm um método getattr que desafia getitem. Isso significa que você pode usar o acesso de atributo para acessar itens desses dicionários. Desempregado desde a versão 3.4: use cargas () em vez disso. Plistlib. WritePlistToBytes (rootObject) Retorna o rootObject como um objeto de bytes formatados XML plist. Desactualizado desde a versão 3.4: use despejos () em vez disso. Estão disponíveis as seguintes classes: Retorne um objeto de mapeamento estendido com o mesmo valor que o dicionário dict. Esta classe é uma subclasse de dict, onde acesso de atributos pode ser usado para acessar itens. Ou seja, aDict. key é o mesmo que aDictkey para obter, configurar e excluir itens no mapeamento. Desempregado desde a versão 3.0. Retornar um objeto wrapper 8220data8221 em torno dos dados do objeto bytes. Isso é usado em funções que se convertem de plists para representar o tipo ltdatagt disponível em plists. Tem um atributo, dados. Que pode ser usado para recuperar o objeto bytes Python armazenado nele. Desempregado desde a versão 3.4: use um objeto bytes em vez disso. Estão disponíveis as seguintes constantes: O formato XML para arquivos plist. Mailing List Archive Post 8 of 9 (946 visualizações) Ronald Oussoren adicionou o comentário: Reabertura porque Cocoa se comporta de forma diferente que eu havia notado anteriormente. O código (Objetivo-C) abaixo serializa um NSDictionary com um valor não assinado de ULLONGMAX e depois o lê de volta. Eu esperava que o valor restaurado continha um número negativo, mas ele realmente lê o valor correto. Eu vou fazer mais spelunking para descobrir o que está acontecendo aqui e ajustarei o código plistlib para representar totalmente todos os valores de inteiros de 64 bits não assinados (provavelmente com base em seu código para suportar inteiros de 128 bits) Saída (em um 64 - bit com OSX 10.9):.demo 2017-01-15 15: 34: 18.196 demo77580: 507 dicionário de entrada: chave 18446744073709551615 valor 18446744073709551615 2017-01-15 15: 34: 18.198 demo77580: 507 como binário: lt62706c69 73743030 d1010253 6b657914 00000000 00000000 ffffffff ffffffff 080b0f00 00000000 00010100 00000000 00000300 00000000 00000000 00000000 000020gt 2017-01-15 15: 34: 18.198 demo77580: 507 Restaurado como chave 18446744073709551615 Para usar: cc - o demo demo. c - framework Cocoa. demo import ltCocoaCocoa. hgt Int main (void) NSAutoreleasePool pool NSAutoreleasePool alloc init NSNumber value NSNumber numberWithUnsignedLongLong: ULLONGMAX NSDictionary dict NSDictionary dictionaryWithObjectsAndKeys: valor, chave, nulo NSLog (dicionário de entrada: valor llu, dict, ULLONGMAX) NSData serializado NSPropertyListSerialization dataWithPropertyList: formato dict: NSPropertyListBinaryFormatv10 opções: 0 error: NSLog nulo (como binário plist:, serializado) NSDictionary restaurado NSPropertyListSerialization propertyListWithData: opções serializadas: 0 formato: nil error: nil NSLog (Restaurado como, restaurado) retornar 0 Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler json e arquivos binários plianticos Responda a questão14455 plistlib incapaz de ler json e binário plist arquivos Ronald Oussoren adicionou o comentário: v3 ainda é um trabalho em andamento e ainda falha em alguns testes Substituiu os dados do teste por dados gerados por um script auxiliar (para facilitar a atualização) Uso 39subtest39 da biblioteca unittest em 3.4 Pequenos ajustes para a biblioteca de plist (a função dumploaddumpsloads no final provavelmente ganhou39 T sobreviva) Link atualizado para o código-fonte CFBinaryPlist. c (esta deve ser uma versão mais recente do arquivo) Opção adicionada para readPlist para passar no tipo de dicionário (padrão para plistlib. InternalDict). Isto é principalmente útil para testes e depuração, mas também reflete o argumento de palavra-chave 39sortkeys39 para o gravador (quando a ordem pode ser importante para a escrita do usuário deve ter alguma maneira de detectar a ordem ao ler). Os dados gerados pelo gerador de plist binário não combinam os dados gerados pelo Cacau no OSX 10.8 (e gerados pelo script do auxiliar), eu não descobri totalmente esse problema ainda. O plistlib gerado e a versão Cocoa podem ser analisados ​​por plistlib e resultar na mesma estrutura de dados Python tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren adicionou o comentário: Veja também: 18168: pedido para a opção 11101 : Solicita uma opção para ignorar 39None39 valores ao escrever 9256: os objetos datetime. datetime criados por plistlib don39t incluem informações de fuso horário (e olhando o código I39d dizer que as fuso horário são ignoradas ao mesmo tempo em que são criados arquivos plist) 10733: o plist de Apple39 pode criar malformados XML (caracteres de controle) do que não pode ser lido por plistlib ---------- Python Ronald Oussoren adicionou o comentário: A quinta versão do patch deve ser muito mais limpa. Limpeza de estilo de codificação, o novo código usa nomes compatíveis com PEP8 para métodos e variáveis. Explicitamente, crie classes privadas privadas, prefixando seu nome com um título de sublinhado (incluindo as classes de XML parsergenerator antigas). Remova o suporte no código binário do plist para conjuntos e uuids, nem pode ser gravado em arquivos plist pelo código Apple39s. Não há suporte para o JSON porque o JSON também não é suportado pelas APIs da lista de propriedades da Apple39. A ferramenta de linha de comando plutil suporta a saída JSON, mas as APIs C e Objective-C não. Não há suporte para o formato antigo do OpenStep. Esse formato está mal documentado, foi obsoleto por um longo período de tempo e a escrita não é suportada pelas bibliotecas plist de Apple39. O formato OpenStep também parece ser muito mais limitado do que os dois modernos. O patch contém plistlib. Que refletem as funções com o mesmo nome dos módulos pickle e json. É útil para adicionar essas funções ao plistlib e depreciar as funções antigas Vantagens: Cleaner API Fornece um caminho limpo para remover plistlib. Data e plistlib. InternalDict (o último já está obsoleto) Desvantagens: - Muito (também) perto do código desnecessário Churn está renomeando PlistParser e PlistWriter ok Ambos são privados e uma busca rápida no google parece indicar que nenhum diretório usa essas classes. Se a renomeação estiver correta, as variáveis ​​de métodos devem ser renomeadas para o estilo PEP8. Se uma palavra-chave 39default39 for adicionada às funções de serialização (simular para a palavra-chave no json. dump), eu não tenho uma ação para isso, o único motivo para adicionar é a consistência com a Módulo json Se uma palavra-chave 39skipvalues39 for adicionada às funções de serialização (para ignorar valores que não podem ser serializados, veja 11101) I39m não está convencido de que isso seria uma boa idéia. Uma palavra-chave 39checkcircular39 deve ser adicionada às funções de serialização (novamente semelhante à mesma palavra-chave para json. dump). Isso evitaria confiar no limite de recursão para quebrar loops infinitos ao serializar estruturas de dados circulares. Precisaria verificar se o plist binário pode conter estruturas de dados circulares quando são escritas usando bibliotecas Apple39s. Python tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren adicionou o comentário: Pretendo cometer a minha versão mais recente do patch durante o europython sprints, com uma pequena alteração: don39t include dump (s) e carga (s), que A alteração (e os outros itens em quotopen issuesquot na minha última publicação) podem ser abordados mais tarde. ---------- Python Tracker Mailing List Archive Ronald Oussoren adicionou o comentário: Ive anexou o item14455-v2.txt com um patch atualizado. O patch ainda é um trabalho em progresso, não tenho tido tanto tempo para trabalhar com isso como o Id. Esta versão: deve aplicar-se de forma limpa à ponta do ramo padrão. Mova-se em torno de algum código. Não passa testes de unidade (provavelmente porque Ive maltratou a fusão manual). Os testes unitários também não cobrem a funcionalidade que eu adicionei. Adiciona skipkeys e classkeys às funções de gravação (com a mesma semântica que essas palavras-chave possuem com json. dump) Adiciona dados aos bytes para as funções de leitura. Então, esta opção é verdadeira, os dados binários são retornados como uma instância de bytes em vez de plistlib. Data O último ainda é o padrão. Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler json e arquivos binários plianticos Responda para 10 de junho de 2017, 5:06 Mensagem 2 de 7 (118 visualizações) Alterações de Ronald Oussoren ltronaldoussorenmacgt: Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Lista de emails Python-bugs-list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler arquivos jers e binários em resposta Ao 10 de junho de 2017, 5:13 Post 3 de 7 (120 visualizações) Ronald Oussoren adicionou o comentário: V3 ainda é um trabalho em andamento, e ainda falha em alguns testes. Dados de teste substituídos por dados gerados por um script auxiliar (para facilitar a atualização) Use o recurso de subtesto da biblioteca unittest em 3.4 Pequenos ajustes para exibir a biblioteca (a função dumploaddumpsloads em t Ele termina provavelmente não vai sobreviver) Link atualizado para o código-fonte CFBinaryPlist. c (esta deve ser uma versão mais recente do arquivo) Opção adicionada para readPlist para passar no tipo de dicionário (padrão para plistlib. InternalDict). Isto é principalmente útil para testar e depurar, mas também reflete o argumento de palavras-chave do separador para o gravador (quando a ordem pode ser importante para escrever o usuário deve ter alguma maneira de detectar a ordem ao ler). Os dados gerados pelo gerador de plist binário não combinam os dados gerados pelo Cacau no OSX 10.8 (e gerados pelo script de ajuda), eu não tenho totalmente depurado esse problema ainda. O plistlib gerado e a versão Cocoa podem ser analisados ​​por plistlib e resultar na mesma estrutura de dados Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython - Bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler arquivos json e bin plist Em resposta a 10 de junho de 2017, 5:23 Post 4 de 7 (118 visualizações) Ronald Oussoren adicionou o comentário: 18168: pedido Para a opção 11101 de separadores: solicitação de uma opção para ignorar valores None ao escrever 9256: os objetos datetime. datetime criados por plistlib não incluem informações de fuso horário (e olhando o código Id dizem que as zonas horárias são ignoradas ao mesmo tempo em que são criados arquivos plist) 10733: Apples plist pode criar XML malformado (caracteres de controle) do que não pode ser lido por plistlib Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailma Noptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler arquivos json e bin plist. Em resposta a 10 de junho de 2017, 8:12 Post 5 of 7 (115 views) Ronald Oussoren adicionou o comentário: The Falha de teste Eu estou sendo causado por uma diferença na ordem em que os itens são gravados no arquivo. Estou trabalhando em uma correção. Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler json e arquivos binários plianticos Responda para 10 de junho de 2017, 9:23 Post 6 de 7 (117 visualizações) Ronald Oussoren adicionou o comentário: v4 passa os testes incluídos. O teste ainda não terminou. Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads question14455 plistlib incapaz de ler json e arquivos binários plianticos Responda para 11 de junho de 2017, 1:40 Post 7 of 7 (129 visualizações) Ronald Oussoren adicionou o comentário: A quinta versão do patch deve ser muito mais limpa. Limpeza de estilo de codificação, o novo código usa nomes compatíveis com PEP8 para métodos e variáveis. Explicitamente, crie classes particulares privadas, prefixando seu nome com um título de sublinhado (incluindo as classes de XML parsergenerator antigas). Remova o suporte no código plist binário para conjuntos e uuids, nem pode ser escrito para arquivos plers pelo código Apples. Não há suporte para o JSON porque o JSON também não é suportado pelas APIs da lista de propriedades da Apples. A ferramenta de linha de comando plutil suporta a saída JSON, mas as APIs C e Objective-C não. Não há suporte para o formato antigo do OpenStep. Esse formato está mal documentado, foi obsoleto por um longo período de tempo, e escrevê-lo não é suportado pelo Apples plist bibliotecas. O formato OpenStep também parece ser muito mais limitado do que os dois modernos. O patch contém plistlib. Que refletem as funções com o mesmo nome dos módulos pickle e json. É útil para adicionar essas funções ao plistlib e depreciar as funções antigas Vantagens: Cleaner API Fornece um caminho limpo para remover plistlib. Data e plistlib. InternalDict (o último já está obsoleto) Desvantagens: - Muito (também) perto do código desnecessário Churn está renomeando PlistParser e PlistWriter ok Ambos são privados e uma busca rápida no google parece indicar que nenhum diretório usa essas classes. Se a renomeação estiver correta, as variáveis ​​de métodos devem ser renomeadas para o estilo PEP8 Se uma palavra-chave padrão for adicionada às funções de serialização (simular para a palavra-chave no json. dump) Eu não tenho uma usecase para isso, o único motivo para adicionar é consistência com a Módulo json Se uma palavra-chave skipvalues ​​for adicionada às funções de serialização (para ignorar valores que não podem ser serializados, veja 11101). Não estou convencido de que isso seja uma boa idéia. Se uma palavra-chave de verificação fosse adicionada às funções de serialização (novamente semelhante à mesma palavra-chave para json. dump), isso evitaria confiar no limite de recursão para quebrar loops infinitos ao serializar as estruturas de dados circulares. Seria necessário verificar se o plist binário pode conter estruturas de dados circulares quando são escritas usando bibliotecas de maçãs. Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list mailing list Cancelar subscrição: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-threads

No comments:

Post a Comment