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 klassenZstdFile
för att läsa och skriva komprimerade filer.Klasserna
ZstdCompressor
ochZstdDecompressor
för stegvis (de)komprimering.Funktionerna
compress()
ochdecompress()
för enstaka (de)komprimering.Funktionerna
train_dict()
ochfinalize_dict()
samt klassenZstdDict
för att träna och hantera Zstandard-ordböcker.Klasserna
CompressionParameter
,DecompressionParameter
ochStrategy
fö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
,bytes
eller 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
DecompressionParameter
för detaljerad information om parametrar som stöds. Argumentet zstd_dict är en instans avZstdDict
som ska användas under dekomprimeringen. Vid läsning, om argumentet level inte är None, kommer ettTypeError
att uppstå.Vid skrivning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
CompressionParameter
fö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
ZstdFile
kan 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
,bytes
eller path-like objekt). Om ett befintligt filobjekt omsluts, kommer den omslutna filen inte att stängas närZstdFile
stä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
DecompressionParameter
för detaljerad information om parametrar som stöds. Argumentet zstd_dict är en instans avZstdDict
som ska användas under dekomprimeringen. Vid läsning, om argumentet level inte är None, kommer ettTypeError
att uppstå.Vid skrivning kan argumentet options vara en ordbok som innehåller avancerade dekomprimeringsparametrar; se
CompressionParameter
fö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.ZstdFile
stö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
name
fö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_level
i options. Användbounds()
påcompression_level
fö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_level
anges.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
ZstdDict
som 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
ZstdDict
som 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_level
i options. Användbounds()
påcompression_level
fö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_level
anges.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
ZstdDict
som 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_BLOCK
ellerFLUSH_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_BLOCK
ellerFLUSH_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
ärFalse
eller0
. En storlek på0
innebär att ramen är tom. Om size ärNone
kommer 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_mode
inte ärFLUSH_FRAME
, uppstår ettValueError
eftersom 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 tillZstdError
och 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_BLOCK
ellerFLUSH_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
ZstdDict
som 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()
,ZstdFile
om 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_input
att 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_input
att 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¶
True
om 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¶
False
om 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
ZstdDict
meddict_content
som 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.
True
betyder att dict_content är en ordbok med ”rått innehåll”, utan några formatbegränsningar.False
betyder 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
ZstdDict
till en funktion kan attributenas_digested_dict
ochas_undigested_dict
styra 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_log
och vissa icke-offentliga parametrar.Ingen
ZstdDict
cachelagrar 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
ZstdDict
utan 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.
0
innebär en ordbok med ”obearbetat innehåll”, fri från formatbegränsningar, som används av avancerade användare.Anteckning
Betydelsen av
0
förZstdDict.dict_id
skiljer sig från attributetdictionary_id
fö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
IntEnum
som 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_log
till 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_level
kan 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 än20
anses 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_log
bytes. 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
fast
ochdfast
.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
,btultra
ochbtultra2
ä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.
True
eller1
aktiverar långdistansmatchning medanFalse
eller0
inaktiverar den.Om du aktiverar den här parametern ökar standardvärdet för
window_log
till 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.
True
eller1
aktiverar innehållsstorleksflaggan medanFalse
eller0
inaktiverar 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
ZstdError
undantag.True
eller1
aktiverar generering av checksumma medanFalse
eller0
inaktiverar den.
- dict_id_flag¶
Vid komprimering med en
ZstdDict
skrivs ordbokens ID in i ramhuvudet.True
eller1
aktiverar lagring av ordboks-ID medanFalse
eller0
inaktiverar 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å1
betyder ”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
IntEnum
som 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_max
till 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
IntEnum
som 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.
0
betyder 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?")