Python

Python gzip-modul

Python gzip-modul

I denne lektion vil vi studere, hvordan vi kan bruge Python gzip modul til at læse og skrive til de komprimerede filer i Python. Den største funktion dette modul giver os er, at vi kan behandle komprimerede filer som normale filobjekter, hvilket sparer os for kompleksiteten ved styring af filer og deres livscyklus i vores kode og giver os mulighed for at fokusere på programmets kerneforretningslogik.Det gzip modul giver os næsten de samme funktioner som GNU-programmerne pistol og gzip.

Skrivning af komprimerede filer med åben ()

Vi starter med et grundlæggende eksempel, hvor vi kan oprette en gzip-fil og skrive nogle data ind i den. Til dette er vi nødt til at oprette en fil og åbne den med skrivetilstand, så data kan indsættes i den. Lad os se på et eksempelprogram, hvormed vi kan skrive data i en gzip-fil:

importer gzip
import io
importer os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
med gzip.åben (output_file, write_mode) som output:
med io.TextIOWrapper (output, kodning = 'utf-8') som kode:
kode.skriv ('Vi kan skrive alt hvad vi vil til filen.\ n ')
udskrive (output_file,
'indeholder', os.stat (output_file).st_size, 'bytes')
os.system ('file -b --mime '.format (output_fil))

Her er hvad vi kommer tilbage med denne kommando:

Skriver til zip-fil

Hvis du nu ser på mappestrukturen, hvor du udførte dette script, skulle der være en ny fil navngivet med det, vi leverede i vores program ovenfor.

Skrivning af flere linjer til en komprimeret fil

Vi kan også skrive flere linjer eller faktisk et hvilket som helst antal linjer i vores gzip-fil på en meget lignende måde som vi gjorde i det foregående eksempel. For at gøre dette eksempel anderledes vil vi også bruge itertools-modulet. Lad os se på prøveprogrammet:

importer gzip
import io
importer os
importere itværktøjer
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
med gzip.åben (output_file, write_mode) som output:
med io.TextIOWrapper (output, kodning = 'utf-8') som enc:
enc.writelines (
itværktøjer.gentag ('LinuxHint, gentager samme linje!.\ n ', 10)
)
os.system ('gzcat linxhint_demo.txt.gz ')

Lad os se output for denne kommando:

Skrivning af flere linjer

Læsning af komprimerede data

Vi kan også læse den komprimerede fil, vi oprettede i det sidste eksempel ved hjælp af gzip-modulet med et meget simpelt opkald til åben fungere:

importer gzip
import io
importer os
file_name = 'linxhint_demo.txt.gz '
file_mode = 'rb'
med gzip.Åbn (filnavn, filtilstand) som inputfil:
med io.TextIOWrapper (input_file, kodning = 'utf-8') som dec:
print (dec.Læs())

Her er hvad vi kommer tilbage med denne kommando:

Læsning af en gzip-fil

Læsestreams

På grund af det faktum, at tekstfiler kan være meget store, er det smart at åbne disse filer i en stream i stedet for at indlæse den komplette fil i et enkelt objekt, der optager meget systemhukommelse og i nogle tilfælde endda kan forårsage processen at gå helt ned. Lad os se på et eksempelprogram, der læser den givne komprimerede fil i en stream:

importer gzip
fra io import BytesIO
import binascii
mode_write = 'wb'
mode_read = 'rb'
ikke-komprimeret = b'Gentagen linje x gange.\ n '* 8
print ('Ikke komprimeret data:', len (ikke_komprimeret))
print (ikke-komprimeret)
buf = BytesIO ()
med gzip.GzipFile (mode = mode_write, fileobj = buf) som fil:
fil.skriv (ikke-komprimeret)
komprimeret = buf.getvalue ()
print ('Komprimeret data:', len (komprimeret))
udskrive (binascii.hexlify (komprimeret))
in_buffer = BytesIO (komprimeret)
med gzip.GzipFile (mode = mode_read, fileobj = in_buffer) som fil:
read_data = fil.læse (len (ikke-komprimeret))
print ('\ nLæser det igen:', len (read_data))
udskriv (read_data)

Lad os se output for denne kommando:

Læsning af gzip-fil i en stream

Selvom programmet var lidt langt, brugte vi faktisk bare Python-moduler til at åbne filen og streame indholdet videre til konsollen med et bufret læserobjekt.

Konklusion

I denne lektion så vi på, hvordan vi kan bruge Python gzip-modul til at komprimere og dekomprimere filer i Python. Den største funktion dette bibliotek giver os er, at vi kan behandle komprimerede filer som normale filobjekter.

Læs flere Python-baserede indlæg her.

Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...
Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...
Bedste Linux Distros til spil i 2021
Linux-operativsystemet er kommet langt fra dets originale, enkle, serverbaserede udseende. Dette operativsystem er forbedret enormt i de senere år og ...