Как да архивирате, разархивирате, създавате и извличате файлове с Python

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

За да направим това, ще използваме модула zipfile, който е вграден в Python. Така че просто трябва да го импортираме в нашите скриптове по този начин.

import zipfile

Извличане или разархивиране от zip файл

Първата стъпка е да отворите файла. Можем да направим това с помощта на клас ZipFile. Предадохме първия аргумент на класа ZipFile име на файл с пътя, който искате да извлечете, ако този файл е в текущата папка, в която се изпълнява скриптът на Python, тогава единственото име на файл е достатъчно. След това предадохме втория аргумент „r“, тъй като искаме да отворим файл, използвайки разрешение за четене, което искаме да го извлечем.

myzip = zipfile.ZipFile('file.zip','r')

Ако искаме цялото му съдържание от zip файл с име file.zip. Ще използваме функцията extractall() и предаденото име на папка, която ще бъде създадена в текущата папка и всички файлове ще бъдат извлечени в тази папка.

myzip.extractall('Foldername')

Или ако искате да извлечете един конкретен файл от file.zip, тогава за това използваме функцията extract() и предаваме име на този конкретен файл. Това ще извлече този файл в текущата директория.

myzip.extract('filename.txt')

На последната стъпка затваряме файла с функцията close().

myzip.close()

Важно е да затворите файла, тъй като има вероятност той да бъде повреден или повреден файл, ако го оставите отворен. Ако не искате да използвате отваряне и затваряне на файл всеки път. Можете да използвате с контекстния мениджър, за да отворите файл, който автоматично ще затвори файла след изпълнение. Това също ще намали броя на линиите.

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.extractall('Foldername')

Ако zip файл има парола, тогава трябва да предадете паролата на функцията setpassword() преди извличане или можете да я предадете на функциятаextract() и extractall() с аргумент pwd. Тъй като функцията се нуждае от парола в байтов низ или трябва да я подадете като b'password или като str.encode('password').

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.setpassword(b'password')
	myzip.extractall('Foldername')

Или можете да направите това.

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.extractall('Foldername',pwd=b'password')

Създаване на zip архивен файл

Сега създаването на zip архивен файл ще бъде нещо подобно на извличането, но тук трябва да отворим файла в режим на запис. Ще използваме ‘w’ като втори аргумент за отваряне на файлове в режим на запис. И след това използвайте функцията write(), в която сме предали името на файл, който искаме да запишем файла в zip файл.

with zipfile.ZipFile('file.zip','w') as myzip:
	myzip.write('file1.txt')

За да добавим множество файлове, бихме добавили множество изрази за запис с различни имена на файлове точно както по-долу.

with zipfile.ZipFile('file.zip','w') as myzip:
	myzip.write('file1.txt')
	myzip.write('file2.png')

За съжаление, като използвате модула zipfile, можете да извлечете zip файла само с парола, но не можете да създадете криптиран zip файл с парола. Това е всичко за тази публикация, уведомете ме, ако сте харесали тази статия или имате въпроси.

Заключение

Благодаря за четенето. За да научите повече за модула zipfile и неговите опции, можете да разгледате техните документи.