compression.zstd — Komprimering kompatibel med Zstandard-formatet¶
Tillagd i version 3.14.
Källkod: Lib/compression/zstd/__init__.py
Denna modul innehåller klasser och funktioner för komprimering och dekomprimering av data med hjälp av komprimeringsalgoritmen Zstandard (eller zstd). I zstd manual beskrivs Zstandard som ”en snabb förlustfri komprimeringsalgoritm, inriktad på realtidskomprimeringsscenarier på zlib-nivå och bättre komprimeringsförhållanden.” Dessutom ingår ett filgränssnitt som stöder läsning och skrivning av innehållet i .zst-filer som skapats av verktyget zstd, samt råa zstd-komprimerade strömmar.
Modulen compression.zstd innehåller:
Funktionen
open()och klassenZstdFileför att läsa och skriva komprimerade filer.Klasserna
ZstdCompressorochZstdDecompressorför stegvis (de)komprimering.Funktionerna
compress()ochdecompress()för enstaka (de)komprimering.Funktionerna
train_dict()ochfinalize_dict()samt klassenZstdDictför att träna och hantera Zstandard-ordböcker.Klasserna
CompressionParameter,DecompressionParameterochStrategyför inställning av avancerade (de)komprimeringsparametrar.
Undantag¶
- exception compression.zstd.ZstdError¶
Detta undantag aktiveras när ett fel inträffar under komprimering eller dekomprimering, eller när (de)kompressortillståndet initieras.
Läsa och skriva komprimerade filer¶
- compression.zstd.open(file, /, mode='rb', *, level=None, options=None, zstd_dict=None, encoding=None, errors=None, newline=None)¶
Öppna en Zstandard-komprimerad fil i binär- eller textläge och returnera ett file object.
Argumentet file kan antingen vara ett filnamn (givet som ett
str,byteseller path-like objekt), i vilket fall den namngivna filen öppnas, eller ett befintligt filobjekt att läsa från eller skriva till.Mode-argumentet kan vara antingen
'rb'för läsning (standard),'wb'för överskrivning,'ab'för tillägg eller'xb'för exklusiv skapelse. Dessa kan på motsvarande sätt anges som'r','w','a'respektive'x'. Du kan också öppna i textläge med'rt','wt','at'respektive'xt'.Vid läsning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
DecompressionParameterför detaljerad information om parametrar som stöds. Argumentet zstd_dict är en instans avZstdDictsom ska användas under dekomprimeringen. Vid läsning, om argumentet level inte är None, kommer ettTypeErroratt uppstå.Vid skrivning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
CompressionParameterför detaljerad information om parametrar som stöds. Argumentet level är den komprimeringsnivå som ska användas vid skrivning av komprimerade data. Endast en av level eller options får vara icke-None. Argumentet zstd_dict är enZstdDict-instans som ska användas under komprimeringen.I binärt läge är denna funktion likvärdig med
ZstdFile-konstruktören:ZstdFile(file, mode, ...). I detta fall får parametrarna encoding, errors och newline inte anges.I textläge skapas ett
ZstdFile-objekt och omsluts av enio.TextIOWrapper-instans med angiven kodning, felhanteringsbeteende och radavslut.
- class compression.zstd.ZstdFile(file, /, mode='rb', *, level=None, options=None, zstd_dict=None)¶
Öppna en Zstandard-komprimerad fil i binärt läge.
En
ZstdFilekan omsluta ett redan öppet file object, eller arbeta direkt på en namngiven fil. Argumentet file anger antingen filobjektet som ska omslutas eller namnet på filen som ska öppnas (som ettstr,byteseller path-like objekt). Om ett befintligt filobjekt omsluts, kommer den omslutna filen inte att stängas närZstdFilestängs.Argumentet mode kan vara antingen
'rb'för läsning (standard),'wb'för överskrivning,'xb'för exklusiv skapelse eller'ab'för tillägg. Dessa kan på motsvarande sätt anges som'r','w','x'respektive'a'.Om file är ett filobjekt (snarare än ett faktiskt filnamn), trunkeras inte filen i ett läge med
'w', utan det motsvarar istället'a'.Vid läsning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
DecompressionParameterför detaljerad information om parametrar som stöds. Argumentet zstd_dict är en instans avZstdDictsom ska användas under dekomprimeringen. Vid läsning, om argumentet level inte är None, kommer ettTypeErroratt uppstå.Vid skrivning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
CompressionParameterför detaljerad information om parametrar som stöds. Argumentet level är den komprimeringsnivå som ska användas vid skrivning av komprimerade data. Endast en av level eller options kan skickas. Argumentet zstd_dict är enZstdDict-instans som ska användas under komprimeringen.ZstdFilestöder alla medlemmar som specificeras avio.BufferedIOBase, förutomdetach()ochtruncate(). Iteration ochwith-satsen stöds.Följande metod och attribut tillhandahålls också:
- peek(size=-1)¶
Returnerar buffrade data utan att flytta fram filpositionen. Minst en byte data kommer att returneras, såvida inte EOF har uppnåtts. Det exakta antalet bytes som returneras är ospecificerat (argumentet size ignoreras).
- mode¶
'rb'för läsning och'wb'för skrivning.
- name¶
Namnet på Zstandard-filen. Motsvarar attributet
nameför det underliggande file object.
Komprimering och dekomprimering av data i minnet¶
- compression.zstd.compress(data, level=None, options=None, zstd_dict=None)¶
Komprimera data (ett bytesliknande objekt) och returnera den komprimerade datan som ett
bytes-objekt.Argumentet level är ett heltal som styr komprimeringsnivån. level är ett alternativ till att ange
CompressionParameter.compression_leveli options. Användbounds()påcompression_levelför att få fram de värden som kan anges för level. Om avancerade komprimeringsalternativ behövs måste argumentet level utelämnas och i ordlistan options ska parameternCompressionParameter.compression_levelanges.Argumentet options är en Python-dictionary som innehåller avancerade komprimeringsparametrar. Giltiga nycklar och värden för komprimeringsparametrar dokumenteras som en del av
CompressionParameter-dokumentationen.Argumentet zstd_dict är en instans av
ZstdDictsom innehåller tränade data för att förbättra komprimeringseffektiviteten. Funktionentrain_dict()kan användas för att generera en Zstandard-ordbok.
- compression.zstd.decompress(data, zstd_dict=None, options=None)¶
Dekomprimerar data (ett bytesliknande objekt) och returnerar de okomprimerade data som ett
bytes-objekt.Argumentet options är en Python-dictionary som innehåller avancerade dekompressionsparametrar. De giltiga nycklarna och värdena för komprimeringsparametrar dokumenteras som en del av
DecompressionParameter-dokumentationen.Argumentet zstd_dict är en instans av
ZstdDictsom innehåller tränade data som används under komprimeringen. Detta måste vara samma Zstandard-ordbok som användes vid komprimeringen.Om data är en sammankoppling av flera olika komprimerade bildrutor, dekomprimera alla dessa bildrutor och returnera sammankopplingen av resultaten.
- class compression.zstd.ZstdCompressor(level=None, options=None, zstd_dict=None)¶
Skapa ett kompressorobjekt som kan användas för att komprimera data stegvis.
För ett mer praktiskt sätt att komprimera en enda datastump, se modulen
compress().Argumentet level är ett heltal som styr komprimeringsnivån. level är ett alternativ till att ange
CompressionParameter.compression_leveli options. Användbounds()påcompression_levelför att få fram de värden som kan anges för level. Om avancerade komprimeringsalternativ behövs måste argumentet level utelämnas och i ordlistan options ska parameternCompressionParameter.compression_levelanges.Argumentet options är en Python-dictionary som innehåller avancerade komprimeringsparametrar. Giltiga nycklar och värden för komprimeringsparametrar dokumenteras som en del av
CompressionParameter-dokumentationen.Argumentet zstd_dict är en valfri instans av
ZstdDictsom innehåller tränade data för att förbättra komprimeringseffektiviteten. Funktionentrain_dict()kan användas för att generera en Zstandard-ordbok.- compress(data, mode=ZstdCompressor.CONTINUE)¶
Komprimerar data (ett bytesliknande objekt), returnerar ett
bytes-objekt med komprimerad data om möjligt, eller annars ett tomtbytes-objekt. En del av data kan buffras internt för att användas i senare anrop tillcompress()ochflush(). De returnerade data bör sammankopplas med utdata från eventuella tidigare anrop tillcompress().Argumentet mode är ett
ZstdCompressor-attribut, antingenCONTINUE,FLUSH_BLOCKellerFLUSH_FRAME.När alla data har levererats till kompressorn anropas metoden
flush()för att avsluta komprimeringsprocessen. Omcompress()anropas med mode satt tillFLUSH_FRAME, skaflush()inte anropas, eftersom det skulle skriva ut en ny tom ram.
- flush(mode=ZstdCompressor.FLUSH_FRAME)¶
Avslutar komprimeringsprocessen och returnerar ett
bytes-objekt som innehåller all data som lagrats i kompressorns interna buffertar.Argumentet mode är ett
ZstdCompressor-attribut, antingenFLUSH_BLOCKellerFLUSH_FRAME.
- set_pledged_input_size(size)¶
Ange mängden okomprimerad data size som ska tillhandahållas för nästa bildruta. size kommer att skrivas in i bildhuvudet för nästa bild om inte
CompressionParameter.content_size_flagärFalseeller0. En storlek på0innebär att ramen är tom. Om size ärNonekommer ramhuvudet att utelämna ramstorleken. Ramar som innehåller den okomprimerade datastorleken kräver mindre minne för att dekomprimeras, särskilt vid högre komprimeringsnivåer.Om
last_modeinte ärFLUSH_FRAME, uppstår ettValueErroreftersom kompressorn inte befinner sig i början av en frame. Om den utlovade storleken inte stämmer överens med den faktiska storleken på data som tillhandahålls tillcompress(), kan framtida anrop tillcompress()ellerflush()ge upphov tillZstdErroroch den sista delen av data kan gå förlorad.Efter att
flush()ellercompress()har anropats med lägetFLUSH_FRAME, kommer nästa bildruta inte att inkludera bildrutans storlek i sidhuvudet om inteset_pledged_input_size()anropas igen.
- CONTINUE¶
Samla in mer data för komprimering, som kanske eller kanske inte genererar utdata omedelbart. Detta läge optimerar komprimeringsgraden genom att maximera mängden data per block och bildruta.
- FLUSH_BLOCK¶
Slutför och skriv ett block till dataströmmen. De data som hittills returnerats kan omedelbart dekomprimeras. Tidigare data kan fortfarande refereras till i framtida block som genereras genom anrop till
compress(), vilket förbättrar komprimeringen.
- FLUSH_FRAME¶
Komplettera och skriv ut en ram. Framtida data som tillhandahålls till
compress()kommer att skrivas in i en ny ram och kan inte referera till tidigare data.
- last_mode¶
Det sista läget som skickades till antingen
compress()ellerflush(). Värdet kan vara ett avCONTINUE,FLUSH_BLOCKellerFLUSH_FRAME. Initialvärdet ärFLUSH_FRAME, vilket betyder att kompressorn är i början av en ny bildruta.
- class compression.zstd.ZstdDecompressor(zstd_dict=None, options=None)¶
Skapa ett dekompressorobjekt som kan användas för att dekomprimera data stegvis.
För ett mer bekvämt sätt att dekomprimera en hel komprimerad ström på en gång, se modulen
decompress().Argumentet options är en Python-dictionary som innehåller avancerade dekompressionsparametrar. De giltiga nycklarna och värdena för komprimeringsparametrar dokumenteras som en del av
DecompressionParameter-dokumentationen.Argumentet zstd_dict är en instans av
ZstdDictsom innehåller tränade data som används under komprimeringen. Detta måste vara samma Zstandard-ordbok som användes vid komprimeringen.Anteckning
Till skillnad från
decompress()-funktionen ochZstdFile-klassen hanterar den här klassen inte inmatningar som innehåller flera komprimerade bildrutor på ett transparent sätt. För att dekomprimera en inmatning med flera bildrutor bör du användadecompress(),ZstdFileom du arbetar med ett file object, eller fleraZstdDecompressor-instanser.- decompress(data, max_length=-1)¶
Dekomprimerar data (ett bytesliknande objekt) och returnerar okomprimerad data som bytes. En del av data kan buffras internt, för användning i senare anrop till
decompress(). Den returnerade datan bör sammanfogas med resultatet från eventuella tidigare anrop tilldecompress().Om max_length är icke-negativ returnerar metoden högst max_length bytes av dekomprimerade data. Om denna gräns nås och ytterligare utdata kan produceras, kommer attributet
needs_inputatt sättas tillFalse. I detta fall kan nästa anrop tilldecompress()ge data somb''för att få mer av utdata.Om alla indata dekomprimerades och returnerades (antingen för att de var mindre än max_length bytes eller för att max_length var negativ), kommer attributet
needs_inputatt sättas tillTrue.Försök att dekomprimera data efter slutet av en bildruta kommer att ge upphov till ett
ZstdError. Alla data som hittas efter ramens slut ignoreras och sparas i attributetunused_data.
- eof¶
Trueom markören för slutet av flödet har nåtts.
- unused_data¶
Data som hittas efter slutet av den komprimerade strömmen.
Innan slutet av strömmen nås kommer detta att vara
b''.
- needs_input¶
Falseom metodendecompress`()kan tillhandahålla mer dekomprimerad data innan den kräver ny komprimerad inmatning.
Zstandard-ordböcker¶
- compression.zstd.train_dict(samples, dict_size)¶
Tränar en Zstandard-ordbok och returnerar en instans av
ZstdDict. Zstandard-ordböcker möjliggör effektivare komprimering av mindre datastorlekar, som traditionellt är svåra att komprimera på grund av mindre upprepning. Om du komprimerar flera liknande datagrupper (t.ex. liknande filer) kan Zstandard-ordböcker förbättra komprimeringsgraden och hastigheten avsevärt.Argumentet samples (en iterabel av
bytes-objekt) är den population av prover som används för att träna Zstandard-ordboken.Argumentet dict_size, ett heltal, är den maximala storleken (i byte) som Zstandard-ordboken ska ha. I Zstandard-dokumentationen föreslås en absolut maxstorlek på högst 100 KB, men maxstorleken kan ofta vara mindre beroende på data. Större ordböcker gör i allmänhet komprimeringen långsammare, men förbättrar komprimeringsgraden. Mindre ordlistor leder till snabbare komprimering, men minskar komprimeringsgraden.
- compression.zstd.finalize_dict(zstd_dict, /, samples, dict_size, level)¶
En avancerad funktion för att konvertera en Zstandard-ordbok med ”rått innehåll” till en vanlig Zstandard-ordbok. ordböcker med ”obearbetat innehåll” är en sekvens av bytes som inte behöver följa strukturen för en vanlig Zstandard-ordbok.
Argumentet zstd_dict är en instans av
ZstdDictmeddict_contentsom innehåller det råa innehållet i ordboken.Argumentet samples (en iterabel av
bytes-objekt) innehåller exempeldata för generering av Zstandard-ordboken.Argumentet dict_size, ett heltal, är den maximala storleken (i byte) som Zstandard-ordboken ska ha. Se
train_dict()för förslag på den maximala ordboksstorleken.Argumentet level (ett heltal) är den komprimeringsnivå som förväntas skickas till kompressorerna med hjälp av denna ordbok. Informationen i ordlistan varierar för varje komprimeringsnivå, så om du ställer in rätt komprimeringsnivå kan komprimeringen bli effektivare.
- class compression.zstd.ZstdDict(dict_content, /, *, is_raw=False)¶
Ett omslag runt Zstandard-ordböcker. Ordböcker kan användas för att förbättra komprimeringen av många små bitar av data. Använd
train_dict()om du behöver träna en ny ordbok från exempeldata.Argumentet dict_content (ett bytesliknande objekt) är den redan utbildade ordboksinformationen.
Argumentet is_raw, ett boolean, är en avancerad parameter som styr betydelsen av dict_content.
Truebetyder att dict_content är en ordbok med ”rått innehåll”, utan några formatbegränsningar.Falsebetyder att dict_content är en vanlig Zstandard-ordbok, skapad från Zstandard-funktioner, till exempeltrain_dict()eller det externa zstd CLI.När du skickar en
ZstdDicttill en funktion kan attributenas_digested_dictochas_undigested_dictstyra hur ordboken laddas genom att skicka dem som argumentetzstd_dict, till exempelcompress(data, zstd_dict=zd.as_digested_dict). Att smälta en ordbok är en kostsam operation som sker när en Zstandard-ordbok laddas. När du gör flera anrop till komprimering eller dekomprimering minskar omkostnaderna för att ladda ordboken genom att skicka en digererad ordbok.Skillnad för komprimering¶ Digererad ordbok
Osmält ordbok
Avancerade parametrar för kompressorn som kan åsidosättas av ordbokens parametrar
window_log,hash_log,chain_log,search_log,min_match,target_length,strategy,enable_long_distance_matching,ldm_hash_log,ldm_min_match,ldm_bucket_size_log,ldm_hash_rate_logoch vissa icke-offentliga parametrar.Ingen
ZstdDictcachelagrar ordboken interntJa, det går snabbare att läsa in en smält ordbok igen med samma komprimeringsnivå.
Nej. Om du vill ladda en obehandlad ordbok flera gånger kan du överväga att återanvända ett kompressorobjekt.
Om du skickar en
ZstdDictutan något attribut, skickas en odigererad ordbok som standard vid komprimering och en digererad ordbok genereras vid behov och skickas som standard vid dekomprimering.- dict_content¶
Innehållet i Zstandard-ordlistan, ett
bytes-objekt. Det är samma som argumentet dict_content i metoden__init__. Det kan användas med andra program, till exempel CLI-programmetzstd.
- dict_id¶
Identifierare för Zstandard-ordlistan, ett icke-negativt int-värde.
Icke-noll betyder att ordlistan är vanlig, skapad av Zstandard-funktioner och följer Zstandard-formatet.
0innebär en ordbok med ”obearbetat innehåll”, fri från formatbegränsningar, som används av avancerade användare.Anteckning
Betydelsen av
0förZstdDict.dict_idskiljer sig från attributetdictionary_idför funktionenget_frame_info().
- as_digested_dict¶
Ladda som en smält ordbok.
- as_undigested_dict¶
Ladda som en osmält ordbok.
Avancerad parameterkontroll¶
- class compression.zstd.CompressionParameter¶
En
IntEnumsom innehåller nycklar för avancerade komprimeringsparametrar som kan användas vid komprimering av data.Metoden
bounds()kan användas på vilket attribut som helst för att få fram giltiga värden för den parametern.Parametrar är valfria; om någon parameter utelämnas kommer dess värde att väljas automatiskt.
Exempel på hur man får fram den nedre och övre gränsen för
compression_level:nedre, övre = Kompressionsparameter.kompressionsnivå.gränser()
Exempel på inställning av
window_logtill maximal storlek:_lower, upper = Kompressionsparameter.window_log.bounds() options = {Komprimeringsparameter.window_log: övre} compress(b'venezuelansk bäverost', options=options)
- bounds()¶
Returnerar en tupel av int-gränser,
(lower, upper), för en komprimeringsparameter. Denna metod bör anropas på det attribut som du vill hämta gränserna för. För att få giltiga värden förcompression_levelkan man t.ex. kontrollera resultatet avCompressionParameter.compression_level.bounds().Både den nedre och den övre gränsen är inkluderande.
- compression_level¶
Ett sätt att på hög nivå ställa in andra komprimeringsparametrar som påverkar hastigheten och förhållandet för komprimering av data.
Vanliga komprimeringsnivåer är större än
0. Värden större än20anses vara ”ultra”-komprimering och kräver mer minne än andra nivåer. Negativa värden kan användas för att kompromissa mellan snabbare komprimering och sämre komprimeringsgrad.Om nivån sätts till noll används
COMPRESSION_LEVEL_DEFAULT.
- window_log¶
Maximalt tillåtet back-reference-avstånd som kompressorn kan använda vid datakomprimering, uttryckt som en potens av två,
1 << window_logbytes. Denna parameter påverkar i hög grad minnesanvändningen vid komprimering. Högre värden kräver mer minne men ger bättre komprimeringsvärden.Ett värde på noll gör att värdet väljs automatiskt.
- hash_log¶
Storlek på den initiala probe-tabellen, som en potens av två. Den resulterande minnesanvändningen är
1 << (hash_log+2)byte. Större tabeller förbättrar komprimeringsgraden för strategier <=dfast, och förbättrar komprimeringshastigheten för strategier >dfast.Ett värde på noll gör att värdet väljs automatiskt.
- chain_log¶
Storlek på söktabellen för flera sonder, som en potens av två. Den resulterande minnesanvändningen är
1 << (chain_log+2)byte. Större tabeller resulterar i bättre och långsammare komprimering. Denna parameter har ingen effekt för strateginfast. Den är fortfarande användbar när du använder strategindfast, i vilket fall den definierar en sekundär probetabell.Ett värde på noll gör att värdet väljs automatiskt.
- search_log¶
Antal sökförsök, som en potens av två. Fler försök resulterar i bättre och långsammare komprimering. Denna parameter är värdelös för strategierna
fastochdfast.Ett värde på noll gör att värdet väljs automatiskt.
- min_match¶
Minsta storlek på sökta matchningar. Större värden ökar komprimerings- och dekomprimeringshastigheten, men minskar förhållandet. Observera att Zstandard fortfarande kan hitta matchningar av mindre storlek, den justerar bara sin sökalgoritm för att leta efter denna storlek och större. För alla strategier <
btoptär det effektiva minimumet4; för alla strategier >fastär det effektiva maximumet6.Ett värde på noll gör att värdet väljs automatiskt.
- target_length¶
Effekten av detta fält beror på den valda
Strategy.För strategierna
btopt,btultraochbtultra2är värdet längden på en matchning som anses vara ”tillräckligt bra” för att sluta söka. Större värden ger bättre komprimeringsgrad, men komprimerar långsammare.För strategi
fastär det avståndet mellan matchningssamplingarna. Större värden gör komprimeringen snabbare, men med ett sämre komprimeringsförhållande.Ett värde på noll gör att värdet väljs automatiskt.
- strategy¶
Ju högre värde på vald strategi, desto mer komplex är den komprimeringsteknik som används av zstd, vilket resulterar i högre komprimeringsgrad men långsammare komprimering.
Se även
Strategi
- enable_long_distance_matching¶
Matchning på långa avstånd kan användas för att förbättra komprimeringen för stora indata genom att hitta stora matchningar på större avstånd. Det ökar minnesanvändningen och fönsterstorleken.
Trueeller1aktiverar långdistansmatchning medanFalseeller0inaktiverar den.Om du aktiverar den här parametern ökar standardvärdet för
window_logtill 128 MiB, utom när det uttryckligen anges till ett annat värde. Den här inställningen är aktiverad som standard omwindow_log>= 128 MiB och komprimeringsstrategin >=btopt(komprimeringsnivå 16+).
- ldm_hash_log¶
Storlek på tabellen för matchning på långt avstånd, som en potens av två. Större värden ökar minnesanvändningen och komprimeringsgraden, men minskar komprimeringshastigheten.
Ett värde på noll gör att värdet väljs automatiskt.
- ldm_min_match¶
Minsta matchningsstorlek för långdistansmatchning. Större eller för små värden kan ofta minska komprimeringsgraden.
Ett värde på noll gör att värdet väljs automatiskt.
- ldm_bucket_size_log¶
Loggar storleken på varje hink i hashtabellen för kollisionsupplösning i Long Distance Matcher. Större värden förbättrar kollisionsupplösningen men minskar komprimeringshastigheten.
Ett värde på noll gör att värdet väljs automatiskt.
- ldm_hash_rate_log¶
Frekvens för infogning/uppslagning av poster i hashtabellen för långdistansmatchning. Större värden förbättrar komprimeringshastigheten. Om du avviker mycket från standardvärdet kommer det sannolikt att leda till en minskning av komprimeringsgraden.
Ett värde på noll gör att värdet väljs automatiskt.
- content_size_flag¶
Skriv in storleken på de data som ska komprimeras i Zstandard-ramhuvudet när den är känd före komprimeringen.
Denna flagga träder endast i kraft i följande scenarier:
Anropar
compress()för komprimering i ett stegTillhandahåller alla data som ska komprimeras i ramen i ett enda
ZstdCompressor.compress()-anrop, medZstdCompressor.FLUSH_FRAME-läge.Anrop av
ZstdCompressor.set_pledged_input_size()med den exakta datamängd som ska levereras till kompressorn före anrop avZstdCompressor.compress()för den aktuella bildrutan.ZstdCompressor.set_pledged_input_size()måste anropas för varje ny bildruta.
Alla andra komprimeringsanrop får inte skriva in storleksinformationen i ramhuvudet.
Trueeller1aktiverar innehållsstorleksflaggan medanFalseeller0inaktiverar den.
- checksum_flag¶
En kontrollsumma på fyra byte som använder XXHash64 för det okomprimerade innehållet skrivs i slutet av varje bildruta. Zstandards dekomprimeringskod verifierar kontrollsumman. Om det finns en felmatchning uppstår ett
ZstdErrorundantag.Trueeller1aktiverar generering av checksumma medanFalseeller0inaktiverar den.
- dict_id_flag¶
Vid komprimering med en
ZstdDictskrivs ordbokens ID in i ramhuvudet.Trueeller1aktiverar lagring av ordboks-ID medanFalseeller0inaktiverar det.
- nb_workers¶
Välj hur många trådar som ska skapas för att komprimera parallellt. När
nb_workers> 0, aktiveras komprimering med flera trådar, ett värde på1betyder ”en-tråds multitrådigt läge”. Fler arbetare förbättrar hastigheten, men ökar också minnesanvändningen och minskar komprimeringsgraden något.Ett värde på noll inaktiverar multi-threading.
- job_size¶
Storlek på ett komprimeringsjobb, i byte. Detta värde gäller endast när
nb_workers>= 1. Varje komprimeringsjobb slutförs parallellt, så det här värdet kan indirekt påverka antalet aktiva trådar.Ett värde på noll gör att värdet väljs automatiskt.
- overlap_log¶
Ställer in hur mycket data som laddas om från tidigare jobb (trådar) för nya jobb som ska användas av look behind-fönstret under komprimeringen. Detta värde används endast när
nb_workers>= 1. Godtagbara värden varierar från 0 till 9.0 innebär att överlappningsmängden ställs in dynamiskt
1 betyder ingen överlappning
9 innebär att man använder en hel fönsterstorlek från föregående jobb
Varje steg halverar/fördubblar överlappningsstorleken. ”8” innebär en överlappning av ”window_size/2”, ”7” innebär en överlappning av ”window_size/4”, etc.
- class compression.zstd.DecompressionParameter¶
En
IntEnumsom innehåller nycklar till avancerade dekomprimeringsparametrar som kan användas vid dekomprimering av data. Parametrarna är valfria; om någon parameter utelämnas kommer dess värde att väljas automatiskt.Metoden
bounds()kan användas på vilket attribut som helst för att få fram giltiga värden för den parametern.Exempel på inställning av
window_log_maxtill maximal storlek:data = compress(b'En mycket lång buffert med bytes...') _lower, upper = Dekomprimeringsparameter.window_log_max.bounds() options = {Dekomprimeringsparameter.window_log_max: upper} decompress(data, options=optioner)
- bounds()¶
Returnerar en tupel av int-gränser,
(lower, upper), för en dekomprimeringsparameter. Denna metod bör anropas på det attribut som du vill hämta gränserna för.Både den nedre och den övre gränsen är inkluderande.
- window_log_max¶
Bas-två-logaritmen av den maximala storleken på det fönster som används vid dekomprimering. Detta kan vara användbart för att begränsa mängden minne som används vid dekomprimering av data. En större maximal fönsterstorlek leder till snabbare dekomprimering.
Ett värde på noll gör att värdet väljs automatiskt.
- class compression.zstd.Strategy¶
En
IntEnumsom innehåller strategier för komprimering. Högre numrerade strategier motsvarar mer komplex och långsammare komprimering.Anteckning
Värdena för attributen i
Strategyär inte nödvändigtvis stabila i olika zstd-versioner. Endast attributens ordningsföljd kan åberopas. Attributen är listade nedan i ordning.Följande strategier finns tillgängliga:
- fast¶
- dfast¶
- greedy¶
- lazy¶
- lazy2¶
- btlazy2¶
- btopt¶
- btultra¶
- btultra2¶
Diverse¶
- compression.zstd.get_frame_info(frame_buffer)¶
Hämtar ett
FrameInfo-objekt som innehåller metadata om en Zstandard-ram. Ramar innehåller metadata som är relaterade till de komprimerade data de innehåller.
- class compression.zstd.FrameInfo¶
Metadata relaterade till en Zstandard-ram.
- decompressed_size¶
Storleken på det dekomprimerade innehållet i ramen.
- dictionary_id¶
Ett heltal som representerar det Zstandard Dictionary ID som behövs för att dekomprimera ramen.
0betyder att ordboks-ID:t inte registrerades i ramhuvudet. Detta kan betyda att en Zstandard-ordbok inte behövs, eller att ID för en nödvändig ordbok inte registrerades.
- compression.zstd.COMPRESSION_LEVEL_DEFAULT¶
Standardkomprimeringsnivå för Zstandard:
3.
- compression.zstd.zstd_version_info¶
Versionsnummer för runtime-biblioteket zstd som en tupel av heltal (major, minor, release).
Exempel¶
Läser in en komprimerad fil:
from compression import zstd
with zstd.open("file.zst") as f:
file_content = f.read()
Skapa en komprimerad fil:
from compression import zstd
data = b"Insert Data Here"
with zstd.open("file.zst", "w") as f:
f.write(data)
Komprimering av data i minnet:
from compression import zstd
data_in = b"Insert Data Here"
data_out = zstd.compress(data_in)
Inkrementell komprimering:
from compression import zstd
comp = zstd.ZstdCompressor()
out1 = comp.compress(b"Some data\n")
out2 = comp.compress(b"Another piece of data\n")
out3 = comp.compress(b"Even more data\n")
out4 = comp.flush()
# Concatenate all the partial results:
result = b"".join([out1, out2, out3, out4])
Skriver komprimerad data till en redan öppen fil:
from compression import zstd
with open("myfile", "wb") as f:
f.write(b"This data will not be compressed\n")
with zstd.open(f, "w") as zstf:
zstf.write(b"This *will* be compressed\n")
f.write(b"Not compressed\n")
Skapa en komprimerad fil med hjälp av komprimeringsparametrar:
from compression import zstd
options = {
zstd.CompressionParameter.checksum_flag: 1
}
with zstd.open("file.zst", "w", options=options) as f:
f.write(b"Mind if I squeeze in?")