Python

Python gzip модул

Python gzip модул

В този урок ще изучаваме как можем да използваме Python gzip модул за четене и запис в компресираните файлове в Python. Най-голямата функция, която този модул ни предоставя, е, че можем да третираме компресираните файлове като нормални файлови обекти, което ни спасява от сложността на управлението на файлове и техния жизнен цикъл в нашия код и ни позволява да се съсредоточим върху основната бизнес логика на програмата.The gzip модул ни предоставя почти същите функции като програмите на GNU като gunzip и gzip.

Писане на компресирани файлове с open ()

Ще започнем с основен пример, където можем да създадем gzip файл и да запишем някои данни в него. За това трябва да направим файл и да го отворим с режим на запис, за да могат да се вмъкват данни в него. Нека разгледаме примерна програма, с която можем да запишем данни в gzip файл:

импортиране на gzip
внос io
внос os
output_file = 'linxhint_demo.текст.gz '
write_mode = 'wb'
с gzip.отвори (изходен файл, запис_режим) като изход:
с io.TextIOWrapper (изход, кодиране = 'utf-8') като кодиране:
кодиране.write ('Може да запишем във файла всичко, което пожелаем.\н')
печат (изходен файл,
„съдържа“, os.stat (изходен_файл).st_size, 'байтове')
операционна система.system ('файл -b --mime '.формат (изходен_файл))

Ето какво получаваме обратно с тази команда:

Запис в zip файл

Ако сега разгледате структурата на папките, в която сте изпълнили този скрипт, трябва да има нов файл, наречен с това, което сме предоставили в нашата програма по-горе.

Записване на множество редове в компресиран файл

Също така можем да напишем множество редове или всъщност произволен брой редове в нашия gzip файл по много подобен начин, както направихме в предишния пример. За да направим този пример различен, ще използваме и модула itertools. Нека да разгледаме примерната програма:

импортиране на gzip
внос io
внос os
импортиране на itertools
output_file = 'linxhint_demo.текст.gz '
write_mode = 'wb'
с gzip.отворен (изходен файл, запис_режим) като изход:
с io.TextIOWrapper (изход, кодиране = 'utf-8') като enc:
енк.линии за писане (
itertools.repeat ('LinuxHint, повтаряйки същия ред!.\ n ', 10)
)
операционна система.система ('gzcat linxhint_demo.текст.gz ')

Нека видим изхода за тази команда:

Писане на множество редове

Четене на компресирани данни

Също така можем да прочетем компресирания файл, който създадохме в последния пример, използвайки модула gzip с много просто извикване отворен функция:

импортиране на gzip
внос io
внос os
file_name = 'linxhint_demo.текст.gz '
file_mode = 'rb'
с gzip.отвори (име_на_файл, режим_файл) като входен_файл:
с io.TextIOWrapper (input_file, encoding = 'utf-8') като dec:
печат (дек.Прочети())

Ето какво получаваме обратно с тази команда:

Четене на gzip файл

Четене на потоци

Поради факта, че текстовите файлове могат да бъдат много големи по размер, е умно да се отварят тези файлове в поток, вместо да се зарежда целият файл в един обект, който заема много системна памет и в някои случаи може дори да предизвика процеса да се срине напълно. Нека разгледаме примерна програма, която чете дадения компресиран файл в поток:

импортиране на gzip
от io импортиране BytesIO
внос binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Повторен ред x пъти.\ n '* 8
print ('Некомпресирани данни:', len (non_compressed))
печат (некомпресиран)
buf = BytesIO ()
с gzip.GzipFile (mode = mode_write, fileobj = buf) като файл:
файл.запис (некомпресиран)
компресиран = buf.getvalue ()
print ('Compressed Data:', len (компресиран))
печат (binascii.hexlify (компресиран))
in_buffer = BytesIO (компресиран)
с gzip.GzipFile (mode = mode_read, fileobj = in_buffer) като файл:
read_data = файл.четене (len (non_compressed))
print ('\ nПрочетете го отново:', len (read_data))
печат (read_data)

Нека видим изхода за тази команда:

Четене на gzip файл в поток

Въпреки че програмата беше малко дълга, ние всъщност просто използвахме модулите на Python, отворихме файла и предавахме съдържанието на конзолата с буфериран обект на четец.

Заключение

В този урок разгледахме как можем да използваме модула Python gzip за компресиране и декомпресиране на файлове в Python. Най-голямата функция, която тази библиотека ни предоставя, е, че можем да третираме компресираните файлове като нормални обекти на файлове.

Прочетете повече публикации на базата на Python тук.

Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...
Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...
Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...