Zip dosya işlemlerini anlamak için Python dosya işlemlerini bilmeniz gerekir. Dosya işlemlerini bilmiyorsanız, öğrenmek için W3Schools’un File Handling bölümüne gidin.
Python’da OOP (Nesne Yönelimli Programlama) kavramı
Koşullar, döngüler, fonksiyonlar, sınıflar vb. gibi Python kavramları
Bir sürü sınıf ve yöntem gördünüz, değil mi? Ancak hepsini öğrenmeyeceksiniz. Zip dosyalarıyla çalışmak için yalnızca bazı sınıf ve yöntemleri öğreneceksiniz.
Şimdi kısa açıklamalarla bazı yararlı İstisnalar, Sınıflar ve Yöntemlere bakalım.
İstisnalar
İstisna, hatayı istediğiniz gibi tam olarak göstermeye yarayan bir mesajdır. Python’da hata yönetimi için try, except, finally anahtar kelimelerini kullanırsınız.
Hata yönetimine aşina değilseniz, öğrenmek için Python’un Error Handling dokümantasyonuna gidin.
zipfile modülündeki tüm istisnalara bakalım.
zipfile.BadZipFile
zipfile.BadZipFile, zipfile modülündeki bir istisnadır. Bu hata, Bozuk Zip dosyaları için yükseltilir. Aşağıdaki örneğe bakın.
## zipfile.BadZipFileimport zipfile
defmain():try:with zipfile.ZipFile('sample_file.zip')asfile:# opening the zip file using 'zipfile.ZipFile' classprint("Ok")except zipfile.BadZipFile:# if the zip file has any errors then it prints the error message which you wrote under the 'except' blockprint('Error: Zip file is corrupted')if __name__ =='__main__': main()## I used a badfile for the testAltyapı:
Diyelim ki büyük bir Zip dosyasıyla çalışmak istiyorsunuz; Zipi açarken ZIP64 işlevselliğini etkinleştirmeniz gerekir. Bunu etkinleştirmezseniz LargeZipFile istisnası yükselir. Örneğe bakın.
## zipfile.LargeZipFile## Without enabling 'Zip64'import zipfile
defmain():try:with zipfile.ZipFile('sample_file.zip')asfile:print('File size is compatible')except zipfile.LargeZipFile:# it raises an 'LargeZipFile' error because you didn't enable the 'Zip64'print('Error: File size if too large')if __name__ =='__main__': main()Altyapı:
## zipfile.LargeZipFile## With enabling 'ZIP64'import zipfile
defmain():try:with zipfile.ZipFile('sample_file.zip', mode ='r', allowZip64 =True)asfile:# here enabling the 'Zip64'print('File size is compatible')except zipfile.LargeZipFile:print('Error: File size if too large')# if the file size is too large to open it prints the error you have writtenif __name__ =='__main__': main()Altyapı:
İstisna yönetimi için en uygun Zip dosyasını seçin ve programı çalıştırmayı deneyin. Net bir fikir edineceksiniz.
Sınıflar
Basitçe söylemek gerekirse, sınıf bir dizi yöntem ve özellikten oluşur. Sınıfınörneklerini oluşturarak sınıf yöntem ve özelliklerini istediğiniz yerde kullanırsınız.
Şimdi zipfile modülünün bazı sınıflarına bakalım.
zipfile.ZipFile
Zip Dosyaları ile çalışmak için en sık kullanılan sınıfZipFile sınıfıdır.
zipfile.ZipFile, Zip dosyalarını yazmak ve okumak için kullanılır. Zip dosyalarını yönetmek için kullanılan bazı yöntemlere sahiptir.
Şimdi ZipFile sınıfının yöntemlerini dir() nesneleriyle keşfedin. Koda bakın.
import zipfile
print(dir(zipfile.ZipFile))# accessing the 'ZipFile' classAltyapı:
Önceki örneklerde zipfile.ZipFile sınıfını Zip dosyalarını okumak için zaten kullandınız.
zipfile.ZipFile, Zip dosyalarıyla çalışmak için extract, open, getinfo, setpassword vb. pek çok yöntem içerir.
Şimdi ZipFile sınıfının bazı yöntemlerine bakalım.
## zipfile.ZipFileimport zipfile
defmain():with zipfile.ZipFile('sample_file.zip')asfile:# ZipFile.infolist() returns a list containing all the members of an archive fileprint(file.infolist())# ZipFile.namelist() returns a list containing all the members with names of an archive fileprint(file.namelist())# ZipFile.getinfo(path = filepath) returns the information about a member of Zip file.# It raises a KeyError if it doesn't contain the mentioned fileprint(file.getinfo(file.namelist()[-1]))# ZipFile.open(path = filepath, mode = mode_type, pwd = password) opens the members of an archive file# 'pwd' is optional -> if it has password mention otherwise leave it
text_file =file.open(name =file.namelist()[-1], mode ='r')# 'read()' method of the file prints all the content of the file. You see this method in file handling.print(text_file.read())# You must close the file if you don't open a file using 'with' keyword# 'close()' method is used to close the file
text_file.close()# ZipFile.extractall(path = filepath, pwd = password) extracts all the files to current directoryfile.extractall()# after executing check the directory to see extracted filesif __name__ =='__main__': main()Altyapı:
[<ZipInfo filename='extra_file.txt' filemode='-rw-rw-rw-' file_size=59>,<ZipInfo filename='READ ME.txt' filemode='-rw-rw-rw-' file_size=59>,<ZipInfo filename='even_odd.py' filemode='-rw-rw-rw-' file_size=129>]['extra_file.txt','READ ME.txt','even_odd.py']<ZipInfo filename='even_odd.py' filemode='-rw-rw-rw-' file_size=129>
b"num = int(input('Enter a Number:- '))\r\nif num % 2 == 0:\r\n\tprint('{} is Even'.fromat(num))\r\nelse:\r\n\tprint('{} is Odd'.fromat(num))"Altyapı:
ZipFile sınıfının tüm yöntemlerini öğrenmek istiyorsanız, öğrenmek istediğiniz yöntem üzerinde help() fonksiyonunu kullanın.
Şimdi zipfile.ZipInfo sınıfının bazı yöntemlerini göreceksiniz
## zipfile.ZipInfoimport zipfile
defmain():with zipfile.ZipFile('sample_file.zip')asfile:# 'infolist()' is the object of 'ZipFile' class# 'infolist()' returns a list containing all the folders and files of the zip -> 'ZipInfo' objects# assigning last element of the list to a variable to test all the methods of 'ZipInfo'
archive =file.infolist()
read_me_file = archive[-1]# 'ZipInfo' methods# ZipInfo_object.filename returns the name of the fileprint("Name of the file:- {}".format(read_me_file.filename))# ZipInfo_object.file_size returns the size of the fileprint("Size of the file:- {}".format(read_me_file.file_size))# ZipInfo_object.is_dir() returns True if it's directory otherwise Falseprint("Is directory:- {}".format(read_me_file.is_dir()))# ZipInfo_object.date_time() returns the created date & time of fileprint("File created data & time:- {}".format(read_me_file.date_time))if __name__ =='__main__': main()Altyapı:
Name of the file:- sample_file/README.txt
Size of the file:-59
Is directory:- False
File created data & time:-(2018,10,4,11,32,22)Altyapı:
ZipInfo nesneleri hakkında daha fazla öğrenmek istiyorsanız ZipInfo’ya gidin.
Yöntemler
Yöntemler, programda belirli bir işlevsellik için yazılmış kod bloklarıdır. Örneğin, bir sayının mutlak değerini bulmak istiyorsanız, Python’daki abs adlı yöntemi kullanabilirsiniz.
İstediğiniz yerde kullanabilirsiniz. Şimdi zipfile modülünün bazı yöntemlerine bakalım.
zipfile.is_zipfile()
zipfile modülünün is_zipfile(filename) yöntemi, dosya geçerli bir Zip ise True, değilse False döndürür.
Bir örneğe bakalım.
## zipfile.is_zip(filename)import zipfile
defmain():print(zipfile.is_zipfile('sample_file.zip'))# it returns Trueif __name__ =='__main__': main()Altyapı:
Bu bölümde Zip dosyalarını Açma, Çıkarma, Yazma vb. işlemlerini nasıl yapacağınızı öğreneceksiniz.
Bir Zip Dosyasını Çıkarmak
Bir Zip dosyasının içindeki dosyaları extractall yöntemiyle geçerli dizine çıkarın.
## extracting zip fileimport zipfile
defmain():# assigning filename to a variable
file_name ='sample_file.zip'# opening Zip using 'with' keyword in read modewith zipfile.ZipFile(file_name,'r')asfile:# printing all the information of archive file contents using 'printdir' methodprint(file.printdir())# extracting the files using 'extracall' methodprint('Extracting all files...')file.extractall()print('Done!')# check your directory of zip file to see the extracted filesif __name__ =='__main__': main()Altyapı:
File Name Modified Size
sample_file/2018-10-0411:33:220
sample_file/even_odd.py 2018-06-2923:35:54129
sample_file/README.txt 2018-10-0411:32:2259
None
Extracting all files...
Done!Altyapı:
Parolalı Bir Zip’i Çıkarmak
Parolalı bir Zipi çıkarmak için, extract(pwd = password) veya extractall(pwd = password) yöntemlerinin pwd konumsal bağımsız değişkenine bir değer geçirmeniz gerekir.
Geçirdiğiniz parola byte türünde olmalıdır. Bir str’ı byte’a dönüştürmek için utf-8 kodlama biçimiyle Python’un yerleşik bytes yöntemini kullanın.
Bir örneğe bakalım.
## extracting zip with passwordimport zipfile
defmain():
file_name ='pswd_file.zip'
pswd ='datacamp'with zipfile.ZipFile(file_name)asfile:# password you pass must be in the bytes you converted 'str' into 'bytes'file.extractall(pwd =bytes(pswd,'utf-8'))if __name__ =='__main__': main()Altyapı:
Ayrıca ZipFile sınıfının setpassword(pwd = password) yöntemini kullanarak da dosyaları çıkarabilirsiniz. Aşağıdaki örneğe bakın.
## extracting zip with passwordimport zipfile
defmain():
file_name ='pswd_file.zip'
pswd ='datacamp'with zipfile.ZipFile(file_name)asfile:# 'setpassword' method is used to give a password to the 'Zip'file.setpassword(pwd =bytes(pswd,'utf-8'))file.extractall()if __name__ =='__main__': main()Altyapı:
Zip Dosyaları Oluşturma
Bir Zip dosyası oluşturmak için ekstra bir yönteme ihtiyacınız yok. ZipFile sınıfına adı verin, o da geçerli dizinde bir arşiv oluşturacaktır.
Aşağıdaki örneğe bakın.
## Creating Zip fileimport zipfile
defmain():
archive_name ='example_file.zip'# below one line of code will create a 'Zip' in the current working directorywith zipfile.ZipFile(archive_name,'w')asfile:print("{} is created.".format(archive_name))if __name__ =='__main__': main()Altyapı:
Dosyaları arşiv dosyasına yazmak için Zip dosyalarını yazma modunda açmalısınız. Bu, Zip’teki mevcut tüm dosyaların üzerine yazar.
Bir örnek görelim.
## Writing files to zipimport zipfile
defmain():
file_name ='sample_file.zip'# Opening the 'Zip' in writing modewith zipfile.ZipFile(file_name,'w')asfile:# write mode overrides all the existing files in the 'Zip.'# you have to create the file which you have to write to the 'Zip.'file.write('extra_file.txt')print('File overrides the existing files')# opening the 'Zip' in reading mode to checkwith zipfile.ZipFile(file_name,'r')asfile:print(file.namelist())if __name__ =='__main__': main()Altyapı:
File overrides the existing files
['extra_file.txt']Altyapı:
Zip’e Dosya Ekleme
Herhangi bir dosyayı Zipe eklemek için append (a) modunda açmalısınız. Mevcut dosyaların üzerine yazmaz.
Bir örnek görelim.
## Appending files to zipimport zipfile
defmain():
file_name ='sample_file.zip'# opening the 'Zip' in writing modewith zipfile.ZipFile(file_name,'a')asfile:# append mode adds files to the 'Zip'# you have to create the files which you have to add to the 'Zip'file.write('READ ME.txt')file.write('even_odd.py')print('Files added to the Zip')# opening the 'Zip' in reading mode to checkwith zipfile.ZipFile(file_name,'r')asfile:print(file.namelist())if __name__ =='__main__': main()Altyapı:
Files added to the Zip
['extra_file.txt','READ ME.txt','even_odd.py']Altyapı:
Buraya kadar Zip dosyalarının nasıl yönetileceğini öğrendiniz. Artık Zip dosyalarını açabilir, yazabilir, ekleyebilir, çıkarabilir, oluşturabilir vb. işlemleri yapabilirsiniz. Şimdi basit bir program yazacaksınız.
Bakın, neymiş?
Döngüler ve zipfile Kullanarak Parolalı Birden Çok Alt Zip’i Çıkarmak
Elinizde derinlikte bazı alt Zip dosyaları içeren bir Zip var. Ve her Zip dosyasının parolası kendi adı. Amacımız, sona ulaşana kadar tüm Zipleri açmak.
Problemi Çözme Adımları
Üst Dosyayı, adı parolası olacak şekilde çıkarın.
namelist() yöntemiyle ilk alt öğenin adını alın. Bir değişkende saklayın.
Sonsuz Kez döngüyü çalıştırın.
Dosyanın Zip olup olmadığını is_zipfile() yöntemiyle kontrol edin. Eğer öyleyse şunları yapın.
name değişkeniyle zip’i açın.
Zipin parolasını name değişkeninden alın.
Zipi çıkarın.
Bir sonraki Zip adını alın ve name değişkeninde saklayın.
aksi halde
break kullanarak döngüyü kırın.
Yukarıdaki Prosedürü ben oluşturdum. İsterseniz dosyalarınızın düzenine göre değiştirebilirsiniz.
## Solutionimport zipfile
defmain():# storing the parent name
parent_file_name ='000.zip'with zipfile.ZipFile(parent_file_name,'r')as parent_file:# extracting the parent file
pswd =bytes(parent_file_name.split('.')[0],'utf-8')
parent_file.extractall(pwd = pswd)# getting the first child
next_zip_name = parent_file.namelist()[0]# looping through the sub zips infinite times until you don't encouter a 'Zip' filewhileTrue:if zipfile.is_zipfile(next_zip_name):# opening the zipwith zipfile.ZipFile(next_zip_name,'r')as child_file:# getting password from the zip name
pswd =bytes(next_zip_name.split('.')[0],'utf-8')# extracting the zip
child_file.extractall(pwd = pswd)# getting the child zip name
next_zip_name = child_file.namelist()[0]else:breakif __name__ =='__main__': main()Altyapı:
Yukarıdaki programı çalıştırdıktan sonra, tüm alt ziplerin geçerli dizine çıkarıldığını göreceksiniz.
Son Not
Tebrikler, eğitimi tamamladınız!
Umarım eğitim hoşunuza gitmiştir. Bu makale, Zip dosyalarıyla çalışırken size epey yardımcı olacaktır. Artık Zip dosyalarıyla çalışabilirsiniz.
Makale ile ilgili herhangi bir sorunuz varsa, yorum bölümünde sorun. En kısa sürede yanıtlayacağım.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Zip Dosyalarıyla Çalışmak İçin Ön Koşullar
Kullanacağım tüm Zip klasörlerini indirmek için bu bağlantıyı açın.
Zip Dosyası Nedir?
Zip, kayıpsız veri sıkıştırmayı destekleyen bir arşiv dosya biçimidir. Zip dosyası, bir veya daha fazla sıkıştırılmış dosyayı içeren tek bir dosyadır.
Zip Dosyasının Kullanım Alanları
zipfile Modülü
zipfile modülünün tüm yöntem ve sınıflarını dir() yöntemiyle keşfedin. zipfile modülünün tüm sınıf ve yöntemlerini almak için koda bakın.
Bir sürü sınıf ve yöntem gördünüz, değil mi? Ancak hepsini öğrenmeyeceksiniz. Zip dosyalarıyla çalışmak için yalnızca bazı sınıf ve yöntemleri öğreneceksiniz.
Şimdi kısa açıklamalarla bazı yararlı İstisnalar, Sınıflar ve Yöntemlere bakalım.
İstisnalar
İstisna, hatayı istediğiniz gibi tam olarak göstermeye yarayan bir mesajdır. Python’da hata yönetimi için try, except, finally anahtar kelimelerini kullanırsınız.
Hata yönetimine aşina değilseniz, öğrenmek için Python’un Error Handling dokümantasyonuna gidin.
zipfile modülündeki tüm istisnalara bakalım.
zipfile.BadZipFile
zipfile.BadZipFile, zipfile modülündeki bir istisnadır. Bu hata, Bozuk Zip dosyaları için yükseltilir. Aşağıdaki örneğe bakın.
zipfile.LargeZipFile
Diyelim ki büyük bir Zip dosyasıyla çalışmak istiyorsunuz; Zipi açarken ZIP64 işlevselliğini etkinleştirmeniz gerekir. Bunu etkinleştirmezseniz LargeZipFile istisnası yükselir. Örneğe bakın.
İstisna yönetimi için en uygun Zip dosyasını seçin ve programı çalıştırmayı deneyin. Net bir fikir edineceksiniz.
Sınıflar
Basitçe söylemek gerekirse, sınıf bir dizi yöntem ve özellikten oluşur. Sınıfın örneklerini oluşturarak sınıf yöntem ve özelliklerini istediğiniz yerde kullanırsınız.
Şimdi zipfile modülünün bazı sınıflarına bakalım.
zipfile.ZipFile
Zip Dosyaları ile çalışmak için en sık kullanılan sınıf ZipFile sınıfıdır.
zipfile.ZipFile, Zip dosyalarını yazmak ve okumak için kullanılır. Zip dosyalarını yönetmek için kullanılan bazı yöntemlere sahiptir.
Şimdi ZipFile sınıfının yöntemlerini dir() nesneleriyle keşfedin. Koda bakın.
Önceki örneklerde zipfile.ZipFile sınıfını Zip dosyalarını okumak için zaten kullandınız.
zipfile.ZipFile, Zip dosyalarıyla çalışmak için extract, open, getinfo, setpassword vb. pek çok yöntem içerir.
Şimdi ZipFile sınıfının bazı yöntemlerine bakalım.
ZipFile sınıfının tüm yöntemlerini öğrenmek istiyorsanız, öğrenmek istediğiniz yöntem üzerinde help() fonksiyonunu kullanın.
Ya da öğrenmek için Python’un resmi dokümantasyonuna gidin.
zipfile.ZipInfo
zipfile.ZipInfo sınıfı, bir Zip klasörünün üyesini temsil etmek için kullanılır.
Önce, dir() yöntemiyle zipfile.ZipInfo sınıfının tüm nesnelerini keşfedin. Aşağıdaki koda bakın.
Şimdi zipfile.ZipInfo sınıfının bazı yöntemlerini göreceksiniz
ZipInfo nesneleri hakkında daha fazla öğrenmek istiyorsanız ZipInfo’ya gidin.
Yöntemler
Yöntemler, programda belirli bir işlevsellik için yazılmış kod bloklarıdır. Örneğin, bir sayının mutlak değerini bulmak istiyorsanız, Python’daki abs adlı yöntemi kullanabilirsiniz.
İstediğiniz yerde kullanabilirsiniz. Şimdi zipfile modülünün bazı yöntemlerine bakalım.
zipfile.is_zipfile()
zipfile modülünün is_zipfile(filename) yöntemi, dosya geçerli bir Zip ise True, değilse False döndürür.
Bir örneğe bakalım.
Zip Dosyalarını Yönetme
Bu bölümde Zip dosyalarını Açma, Çıkarma, Yazma vb. işlemlerini nasıl yapacağınızı öğreneceksiniz.
Bir Zip Dosyasını Çıkarmak
Bir Zip dosyasının içindeki dosyaları extractall yöntemiyle geçerli dizine çıkarın.
Parolalı Bir Zip’i Çıkarmak
Parolalı bir Zipi çıkarmak için, extract(pwd = password) veya extractall(pwd = password) yöntemlerinin pwd konumsal bağımsız değişkenine bir değer geçirmeniz gerekir.
Geçirdiğiniz parola byte türünde olmalıdır. Bir str’ı byte’a dönüştürmek için utf-8 kodlama biçimiyle Python’un yerleşik bytes yöntemini kullanın.
Bir örneğe bakalım.
Ayrıca ZipFile sınıfının setpassword(pwd = password) yöntemini kullanarak da dosyaları çıkarabilirsiniz. Aşağıdaki örneğe bakın.
Zip Dosyaları Oluşturma
Bir Zip dosyası oluşturmak için ekstra bir yönteme ihtiyacınız yok. ZipFile sınıfına adı verin, o da geçerli dizinde bir arşiv oluşturacaktır.
Aşağıdaki örneğe bakın.
Zip Dosyalarına Yazma
Dosyaları arşiv dosyasına yazmak için Zip dosyalarını yazma modunda açmalısınız. Bu, Zip’teki mevcut tüm dosyaların üzerine yazar.
Bir örnek görelim.
Zip’e Dosya Ekleme
Herhangi bir dosyayı Zipe eklemek için append (a) modunda açmalısınız. Mevcut dosyaların üzerine yazmaz.
Bir örnek görelim.
Buraya kadar Zip dosyalarının nasıl yönetileceğini öğrendiniz. Artık Zip dosyalarını açabilir, yazabilir, ekleyebilir, çıkarabilir, oluşturabilir vb. işlemleri yapabilirsiniz. Şimdi basit bir program yazacaksınız.
Bakın, neymiş?
Döngüler ve zipfile Kullanarak Parolalı Birden Çok Alt Zip’i Çıkarmak
Problemi Çözme Adımları
Sonsuz Kez döngüyü çalıştırın.
Dosyanın Zip olup olmadığını is_zipfile() yöntemiyle kontrol edin. Eğer öyleyse şunları yapın.
name değişkeniyle zip’i açın.
Zipin parolasını name değişkeninden alın.
Zipi çıkarın.
Bir sonraki Zip adını alın ve name değişkeninde saklayın.
aksi halde
Yukarıdaki Prosedürü ben oluşturdum. İsterseniz dosyalarınızın düzenine göre değiştirebilirsiniz.
Yukarıdaki programı çalıştırdıktan sonra, tüm alt ziplerin geçerli dizine çıkarıldığını göreceksiniz.
Son Not
Tebrikler, eğitimi tamamladınız!
Umarım eğitim hoşunuza gitmiştir. Bu makale, Zip dosyalarıyla çalışırken size epey yardımcı olacaktır. Artık Zip dosyalarıyla çalışabilirsiniz.
Makale ile ilgili herhangi bir sorunuz varsa, yorum bölümünde sorun. En kısa sürede yanıtlayacağım.
Yine, Python’a yeniyseniz, Python dilini öğrenmek için DataCamp’in ücretsiz Intro to Python for Data Science kursunu alın ya da Python’ın resmi dokümantasyonunu okuyun.
Keyifli Kodlamalar!