Saturday, 16 December 2017

Plistlib binära alternativ


14,5. plistlib 8212 Generera och tolka Mac OS X. plist-filer Den här modulen ger ett gränssnitt för läsning och skrivning av 8220property list8221-filer som används främst av Mac OS X och stöder både binära och XML-plistfiler. Listformatlistan (.plist) är en enkel serialisering som stöder grundläggande objekttyper, som ordböcker, listor, siffror och strängar. Vanligtvis är det översta objektet en ordlista. För att skriva ut och analysera en plistfil, använd funktionen dump () och ladda (). För att arbeta med plistdata i byteobjekt, använd dumpar () och laster (). Värden kan vara strängar, heltal, floats, booleans, tuples, listor, ordböcker (men endast med strängtangenter), Data. byte. bytesarray eller datetime. datetime objekt. Ändrad i version 3.4: Nytt API, gammalt API avlägsnat. Stöd för binärformatplister läggs till. PList manuell sida Apple8217s dokumentation av filformatet. Den här modulen definierar följande funktioner: Läs en plistfil. fp ska vara ett läsbart och binärt filobjekt. Returnera det uppackade rotobjektet (som vanligtvis är en ordlista). Fmt är formatet för filen och följande värden är giltiga: Om usebuiltintypen är sanna (standard) kommer binär data att returneras som instanser av byte. annars returneras det som fall av Data. Diktypen är den typ som används för ordböcker som läses från plistfilen. Plistens exakta struktur kan återvinnas genom att använda samlingar. OrderadDict (även om ordern på nycklarna inte borde vara viktiga i plistfiler). XML-data för FMTXML-formatet analyseras med Expat-parsern från xml. parsers. expat 8211, se dokumentationen för eventuella undantag på felformad XML. Okända element kommer helt enkelt att ignoreras av plistparsern. Parsern för det binära formatet ökar InvalidFileException när filen inte kan analyseras. Nytt i version 3.4. Ladda en plist från ett byteobjekt. Se belastning () för en förklaring av sökordsargumenten. Nytt i version 3.4. Skriv värde till en plistfil. Fp ska vara ett skrivbart, binärt filobjekt. Fmt-argumentet anger formatet för plistfilen och kan vara ett av följande värden: När sorteringar är sanna (standard) skrivs nycklarna för ordböcker till plistan i sorterad ordning, annars kommer de att skrivas i iterationsordningen i ordlistan. När skipkeys är falska (standard) höjer funktionen TypeError när en nyckel i en ordlista inte är en sträng, annars ignoreras sådana tangenter. En TypeError kommer att höjas om objektet är av en ostödd typ eller en behållare som innehåller objekt av ostödda typer. En OverflowError kommer att höjas för integervärden som inte kan representeras i (binära) plistfiler. Nytt i version 3.4. Returnera värdet som ett plistformat byteobjekt. Se dokumentationen för dumpning () för en förklaring av nyckelordets argument för denna funktion. Nytt i version 3.4. Följande funktioner avlägsnas: plistlib. readPlist (pathOrFile) Läs en plistfil. pathOrFile kan vara antingen ett filnamn eller ett (läsbart och binärt) filobjekt. Returnerar det uppackade rotobjektet (som vanligtvis är en ordlista). Denna funktion kallar load () för att göra det verkliga arbetet, se dokumentationen för den funktionen för en förklaring av sökordsargumenten. Diktvärden i resultatet har en getattr-metod som försvarar sig till getitem. Det betyder att du kan använda attribut åtkomst för att komma åt objekt i dessa ordböcker. Utgått sedan version 3.4: Använd load () istället. plistlib. writePlist (rootObject. pathOrFile) Skriv rootObject till en XML-plistfil. pathOrFile kan vara antingen ett filnamn eller ett (skrivbart och binärt) filobjekt. Utgått sedan version 3.4: Använd dump () istället. plistlib. readPlistFromBytes (data) Läs en plistdata från ett bytesobjekt. Återvänd rotobjektet. Se belastning () för en beskrivning av nyckelordsargumenten. Diktvärden i resultatet har en getattr-metod som försvinner till getitem. Det betyder att du kan använda attribut åtkomst för att komma åt objekt i dessa ordböcker. Utgått sedan version 3.4: Använd i stället belastningar (). plistlib. writePlistToBytes (rootObject) Returnera rootObject som ett XML-plistformaterat byteobjekt. Utgått sedan version 3.4: Använd dumpar () istället. Följande klasser är tillgängliga: Returnera ett utvidgat kartläggningsobjekt med samma värde som ordboksdikt. Denna klass är en underklass av dikt där attributåtkomst kan användas för att komma åt objekt. Det vill säga aDict. key är samma som aDictkey för att få, ställa in och radera objekt i mappningen. Utgått sedan version 3.0. Returnera ett 8220data8221 wrapperobjekt runt bytesobjektdata. Detta används i funktioner som konverterar från till plistor för att representera ltdatagtypen som finns i plistor. Den har ett attribut, data. som kan användas för att hämta Python bytes-objektet som är lagrat i det. Utgått sedan version 3.4: Använd ett bytesobjekt istället. Följande konstanter är tillgängliga: XML-formatet för plistfiler. Marknadsföringsarkiv Inlägg 8 av 9 (946 visningar) Ronald Oussoren lade till kommentaren: Återupptagning, eftersom Cocoa beter sig annorlunda än jag hade märkt tidigare. Koden (Objektiv-C) nedan serialiserar ett NSDictionary med ett osignerat långt värde ULLONGMAX och läser sedan det tillbaka. Jag hade förväntat mig att det återställda värdet innehöll ett negativt tal, men det läser faktiskt det rätta värdet. Jag kommer att göra lite mer spelunking för att ta reda på vad som händer här och justera plistlib-koden för att fullt ut representera alla värden för osignerade 64-bitars heltal (sannolikt baserat på din kod för att stödja 128 bitars heltal) Utgång (på 64 - bit-system som kör OSX 10.9):.demo 2014-01-15 15: 34: 18.196 demo77580: 507 inmatningsordbok: nyckel 18446744073709551615 värde 18446744073709551615 2014-01-15 15: 34: 18.198 demo77580: 507 som binär plist: lt62706c69 73743030 d1010253 6b657914 00000000 00000000 ffffffff ffffffff 080b0f00 00000000 00010100 00000000 00000300 00000000 00000000 00000000 000020gt 2014-01-15 15: 34: 18.198 demo77580: 507 Återställd som nyckel 18446744073709551615 Att använda: cc - o demo demo. c - framställning Kakao. demo import ltCocoaCocoa. hgt int main (void) NSAutoreleasePool pool NSAutoreleasePool alloc init NSNumber value NSNumber numberWithUnsignedLongLong: ULLONGMAX NSDictionary dict NSDictionary dictionaryWithObjectsAndKeys: värde, nyckel, noll NSLog (inmatningsordbok: värde llu, dict, ULLONGMAX) NSData serialiserad NSPropertyListSerialization dataWithPropertyList: diktformat: NSPropertyListBinaryFormatv10 alternativ: 0 fel: nil NSLog (som binär plist: serialiserad) NSDictionary återställd NSPropertyListSerialization propertyListWithData: serialiserade alternativ: 0 format: null fel: nil NSLog (Återställd som återställd) returnera 0 Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avbryt prenumerationen: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-thread issue14455 plistlib kan inte läsa json och binära plistfiler I svara på issue14455 plistlib kan inte läsa json och binär plistfiler Ronald Oussoren lade till kommentaren: v3 är fortfarande ett pågående arbete och misslyckas fortfarande med några tester. Byt testdata med data som genereras av ett hjälparcript (för att underlätta uppdateringen). Använd 39subtest39 funktionen av unittest library i 3.4 Små tweaks till plist biblioteket (funktionen dumploaddumpsloads i slutet vann förmodligen39 t överlever) Uppdaterad länk till CFBinaryPlist. c källkod (det här borde vara en nyare version av filen) Lätt att läsaLista för att passera i ordbokstypen (standard till plistlib. InternalDict). Detta är främst användbart för testning och felsökning, men speglar också 39sortkeys39-nyckelordsargumentet för författaren (när ordern kan vara viktig för skrivning ska användaren ha något sätt att upptäcka ordningen vid läsning). De data som genereras av binär plistgeneratorn matchar inte data som genereras av kakao i OSX 10.8 (och genereras av hjälparcriptet), jag har inte helt debugged det problemet ännu. Den genererade binära plasten och kakaoversionen kan både analyseras av plistlib och resultera i samma datastruktur Python tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren lade till kommentaren: Se också: 18168: begäran om sorteringsalternativet 11101 : Förfrågan om ett alternativ att ignorera 39None39-värden när du skriver 9256: datetime. datetimeobjekt skapade av plistlib don39t inkluderar tidszoninformation (och tittar på koden I39d säger att tidszoner ignoreras när du skriver plistfiler också) 10733: Apple39s plist kan skapa felaktiga XML (kontrolltecken) än kan inte läsas av plistlib ---------- Python Ronald Oussoren lade till kommentaren: Den femte versionen av patchen ska vara mycket renare. Kodningsstädning, den nya koden använder PEP8-konformationsnamn för metoder och variabler. Uppenbarligen gör privata klasser privata genom att prefixa deras namn med ett understreck (inklusive de gamla XML-parsergenerator klasserna) Ta bort support i binär plistkod för uppsättningar och uuids, inte heller kan skrivas till plistfiler med Apple39s kod. Det finns inget stöd för JSON eftersom JSON inte heller stöds av Apples39s korrekturläsare API. Kommandoradsverktyget plutil stöder JSON-utdata, men C och Objective-C-API: erna inte. Det finns inget stöd för det gamla OpenStep-formatet. Det formatet är dåligt dokumenterat, har avlägsnats länge, och skrivandet stöds inte av Apples plistorbibliotek. OpenStep-formatet verkar också vara mycket mer begränsat än de två moderna. Plåstret innehåller plistlib. vilket speglar funktionerna med samma namn från pickle och json-modulerna. Det är användbart att lägga till dessa funktioner i plistlib och avlägsna de äldre funktionerna. Fördelar: Cleaner API Ger en ren väg för att ta bort plistlib. Data och plistlib. InternalDict (den senare är redan avlägsnad) Nackdelar: - Mycket (för) nära oönskad kod churn Byter namn på PlistParser och PlistWriter ok Båda är privata och en snabb sökning på google tycks indikera att ingen katalog använder dessa klasser. Om omdirigering är ok bör metodvariabler bytas till PEP8-stil. Om ett 39default39-nyckelord läggs till serialiseringsfunktionerna (simulera till sökordet i json. dump), har jag inte en usecase för detta. Den enda anledningen att lägga till är överensstämmelse med json-modul Skulle ett 39-nyckelvalues39-nyckelord läggas till serialiseringsfunktionerna (för att ignorera värden som inte kan serialiseras, se 11101) Jag är inte övertygad om att det här skulle vara en bra idé. Skulle ett 39checkcircular39-nyckelord läggas till serialiseringsfunktionerna (återigen liknar samma sökord för json. dump). Detta skulle undvika att förlita sig på rekursionsgränsen för att bryta oändliga loopar vid serialiserande cirkulära datastrukturer. Ska behöva kontrollera om binär plist kan innehålla cirkulära datastrukturer när de skrivs med hjälp av Apple39s bibliotek. Python tracker lt reportbugs. python. org gt Ronald Oussoren Ronald Oussoren lade till kommentaren: Jag tänker begå min senaste version av patchen under europython-sprinten, med en mindre förändring: inte inkludera dumpning (er) och last (er) som ändra (och de andra föremålen på kvotemissioner i mitt senaste inlägg) kan adresseras senare. ---------- Python Tracker Mailing List Archive Ronald Oussoren lade till kommentaren: Ive bifogade issue14455-v2.txt med en uppdaterad patch. Plåstret är fortfarande väldigt mycket arbete pågår, jag har inte haft så mycket tid att arbeta på detta som Id gillar. Den här versionen: Ska gälla rent till toppen av standardgrenen Flytta runt en kod. Passerar inte enhetstest (sannolikt för att Ive botched den manuella sammanslagningen). Unittest täcker inte heller den funktion som Ive har lagt till. Lägger till skipkeys och sortera till skrivfunktionerna (med samma semantik som dessa nyckelord har med json. dump) Lägger till dataasbytes till läsfunktionerna. Då är detta alternativ sant binär data returneras som en förekomst av byte istället för plistlib. Data Den senare är fortfarande standard. Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avbryt prenumerationen: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-thread issue14455 plistlib kan inte läsa json och binära plistfiler I svara på 10 jun 2013, 5:06 AM Post 2 av 7 (118 visningar) Ändringar av Ronald Oussoren ltronaldoussorenmacgt: Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avregistrera: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-tråden issue14455 plistlib kan inte läsa json och binär plistfiler Svar på 10 jun 2013, 5:13 AM Post 3 av 7 (120 visningar) Ronald Oussoren lade till kommentaren: v3 är fortfarande ett pågående arbete, och misslyckas fortfarande med några test. Ersätt testdata med data som genereras av ett hjälparcript (för att underlätta uppdateringen). Använd subtestfunktionen i unittest library i 3.4 Små tweaks för att plistbiblioteket (funktionen dumploaddumpsloads på t han slutar antagligen inte överleva) Uppdaterad länk till CFBinaryPlist. c källkod (det här borde vara en nyare version av filen) Tillagd möjlighet att readPlist för att passera i ordbokstypen (standard till plistlib. InternalDict). Detta är primärt användbart för testning och felsökning, men speglar också sökordets argument för författaren (när ordern kan vara viktig för att skriva användaren, borde det ha något sätt att upptäcka ordningen vid läsning). Uppgifterna som genereras av binär plistgeneratorns doest matchar data som genereras av kakao i OSX 10.8 (och genereras av hjälparcriptet), jag har inte fullständigt debugged det problemet ännu. Den genererade binära plist och kakao-versionen kan både analyseras av plistlib och resultera i samma datastruktur Python tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 gt Python-bugs-list-postlista Avregistrera: mail. python. orgmailmanoptionspython - bugs-listlist-python-bugs40lists. gossamer-threads issue14455 plistlib kan inte läsa json och binära plistfiler Svar på 10 jun 2013, 5:23 AM Post 4 av 7 (118 visningar) Ronald Oussoren lade till kommentaren: 18168: Förfrågan för sorteringsalternativet 11101: begäran om ett alternativ att ignorera Inga värden när du skriver 9256: datetime. datetimeobjekt som skapats av plistlib inkluderar inte tidszoninformation (och tittar på koden Id säger att tidszoner ignoreras när du skriver plistfiler också) 10733: Apples plist kan skapa felformat XML (kontrolltecken) än det kan inte läsas av plistlib Python Tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-Bugs-list-postlista Avsluta: mail. python. orgmailma noptionspython-bugs-listlist-python-bugs40lists. gossamer-tråden issue14455 plistlib kan inte läsa json och binära plistfiler Svar på 10 jun 2013, 8:12 AM Post 5 av 7 (115 visningar) Ronald Oussoren lade till kommentaren: The testfel Jag får orsakas av en skillnad i den ordning i vilken artiklar skrivs till arkivet. Jag arbetar med en fix. Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avbryt prenumerationen: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-thread issue14455 plistlib kan inte läsa json och binära plistfiler I svara den 10 jun 2013, 9:23 Post 6 av 7 (117 visningar) Ronald Oussoren lade till kommentaren: v4 klarar de medföljande testerna. Testsuite är inte färdig än. Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avbryt prenumerationen: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-thread issue14455 plistlib kan inte läsa json och binära plistfiler I svara den 11 juni 2013, 1:40 AM Inlägg 7 av 7 (129 visningar) Ronald Oussoren lade till kommentaren: Den femte versionen av patchen ska vara mycket renare. Kodningsstädning, den nya koden använder PEP8-konformationsnamn för metoder och variabler. Uppenbarligen gör privata klasser privata genom att prefixa deras namn med ett understreck (inklusive de gamla XML-parsergenerator-klasserna) Ta bort support i binär plistkoden för uppsättningar och uuider, inte heller kan skrivas till plistfiler med Apples-kod. Det finns inget stöd för JSON eftersom JSON inte heller stöds av Apples propertylist API. Kommandoradsverktyget plutil stöder JSON-utdata, men C och Objective-C-API: erna inte. Det finns inget stöd för det gamla OpenStep-formatet. Det formatet är dåligt dokumenterat, har avlägsnats länge, och det skrivs inte av Apples plistbibliotek. OpenStep-formatet verkar också vara mycket mer begränsat än de två moderna. Plåstret innehåller plistlib. vilket speglar funktionerna med samma namn från pickle och json-modulerna. Det är användbart att lägga till dessa funktioner i plistlib och avlägsna de äldre funktionerna. Fördelar: Cleaner API Ger en ren väg för att ta bort plistlib. Data och plistlib. InternalDict (den senare är redan avlägsnad) Nackdelar: - Mycket (för) nära oönskad kod churn Byter namn på PlistParser och PlistWriter ok Båda är privata och en snabb sökning på google tycks indikera att ingen katalog använder dessa klasser. Om omdirigering är ok bör metodvariabler bytas till PEP8-stil. Om ett standardt nyckelord läggs till serialiseringsfunktionerna (simular till sökordet i json. dump), har jag inte en usecase för detta. Den enda anledningen till att lägga till är överensstämmelse med json-modul Om ett nyckelval för nyckelord läggs till i serialiseringsfunktionerna (för att ignorera värden som inte kan serialiseras, se 11101) Jag är inte övertygad om att det här skulle vara en bra idé. Skulle ett kontrollcirkulärt nyckelord läggas till i serialiseringsfunktionerna (igen liknar samma sökord för json. dump). Detta skulle undvika att förlita sig på rekursionsgränsen för att bryta oändliga loopar vid serialiserande cirkulära datastrukturer. Skulle behöva kontrollera om binär plist kan innehålla cirkulära datastrukturer när de skrivs med Apples bibliotek. Python-tracker ltreportbugs. python. orggt ltbugs. python. orgissue14455 Python-bugs-list-postlista Avbryt prenumerationen: mail. python. orgmailmanoptionspython-bugs-listlist-python-bugs40lists. gossamer-thread

No comments:

Post a Comment