Dosyalarla ilgilenen bir uygulama oluşturuyorsanız, yerden tasarruf etmek için zip kullanmayı düşünün.
Sıkıştırma, birkaç dosyayı sıkıştırmanın ve bunları tek bir dosyada birleştirmenin zarif bir yoludur. Bu, bir ağ üzerinden dosya aktarırken yalnızca depolama alanından değil aynı zamanda bant genişliğinden de tasarruf sağlar. Zip’in en iyi özelliklerinden biri, tüm büyük platformlarda çalışmasıdır: Windows, Linux ve Mac.
Zip, sıkıştırırken ve açarken tüm verileri korumak için kayıpsız sıkıştırma kullanır. Ayrıca zip dosyalarınızı şifreleyebilir ve şifrelerini çözebilirsiniz.
Keşfedilecek pek çok özellikle Python zipfile modülünü kullanarak dosyaları nasıl okuyabileceğinizi, sıkıştırabileceğinizi ve açabileceğinizi keşfedin.
zipfile Modülü Nedir?
Python kullanarak zip dosyalarını değiştirmek için standart zipfile modülünü kullanabilirsiniz. Bu modül ile zip dosyalarını açıp okuyabilir, meta verilerini okuyabilir, bir zip dosyası oluşturabilir, sıkıştırabilir ve dosyaları açabilirsiniz. Kullanılabilir üç sıkıştırma yöntemi vardır: Deflate, Bzip2 ve LZMA.
Modülün eksik olduğu şeylerden biri, çoklu disk dosyalarını işleme yeteneğidir, ancak ZIP64 uzantısını yönetir. Ayrıca zip arşivlerinin şifresini çözebilir ancak şifreleyemez. Zipfile modülünü kullanarak, değişiklik tarihi ve saati gibi zip dosyası meta verilerini alabilirsiniz. Ayrıca dosyayı oluşturmak için kullanılan işletim sistemi, zip sürümü ve dosya boyutu gibi ayrıntıları hem sıkıştırılmış hem de sıkıştırılmamış biçimde alabilirsiniz.
Python Kullanarak Dosyaları Sıkıştırma
Python’un zipfile modülünü kullanarak birden çok dosyayı tek bir arşive sıkıştırabilirsiniz. Gerekli zip işlemlerini gerçekleştirmek için zipfile paketinden ZipFile modülünü içe aktarın . Ayrıca dosyaları seçmek ve kaydetmek için os modülünü içe aktarın .
get_all_file_paths() işlevini tanımlayın . Sıkıştırılacak dosyaları içeren klasörün yolunu içeren bir dizin parametresini kabul etmelidir.
Dosya yollarının listesini saklayacak boş bir liste başlatın. os.walk() işlevini kullanarak hedef dizinin tüm içeriğini almak için bir for döngüsü kullanın . Bu işlev, yukarıdan aşağıya veya aşağıdan yukarıya bir yaklaşımla bir dizin ağacında hareket ederek dosya adlarını getirir. Her dizin için işlev, kök, dizinler ve dosyalar içeren üç demet döndürür.
Kök, dizinin tam yolunu içeren bir dizedir. Dizin listesi, dizinde bulunan tüm alt dizinleri içerir. Dosya listesi, dizinde bulunan tüm dosyaları içerir.
Döngünün içinde, dosya listesi üzerinde yinelenecek başka bir döngü bildirin . Tam bir yol oluşturmak için dizinin adını her dosya adıyla birleştirmek için os.path.join() işlevini kullanın . Ardından, bu tam dosya adını daha önce oluşturduğunuz listeye ekleyin. Bu işlem bittiğinde, dosya yollarının listesini döndürün.
# import the required modules
from zipfile import ZipFile
import os# create a function to get all the file paths
def get_all_file_paths(directory):
# initializing empty list to store file paths
file_paths = []# navigate through the files
for root, directories, files in os.walk(directory):
for filename in files:
# join the root and filename to create a complete file path
filepath = os.path.join(root, filename)
file_paths.append(filepath)# returning all file paths
return file_paths
Sıkıştırmak istediğiniz dosyaları içeren klasörün yolunu dizin adlı bir değişkende saklayın. Daha önce oluşturduğunuz get_all_file_paths() işlevini çağırın ve döndürdüğü değeri file_paths içinde saklayın .
Kullanıcıya, programın sıkıştıracağı dosyaların bunlar olduğunu bildiren bir mesaj görüntüleyin. Dosyaları yineleyin ve adlarını görüntüleyin.
Programın özel durumları işlemek için with deyimini kullanarak yazılabilir bir dosya döndürdüğü belirtimi ile birlikte zip dosyanızın sahip olmasını istediğiniz adı iletin. Her dosya üzerinde yineleme yapın ve yazılabilir dosya üzerinden bir zip dosyasına write() işlevini kullanın.
İşlem tamamlandığında, programın tüm dosyaları başarıyla sıkıştırdığını açıklayan bir mesaj çıktısı alın.
# path to folder you want to zip
directory = ‘./pythonzip’# calling function to get all file paths in the directory
file_paths = get_all_file_paths(directory)# printing the list of all files you want to zip
print(‘List of files that will be zipped:’)for file_name in file_paths:
print(file_name)# writing files to a zipfile
with ZipFile(‘my_file.zip’, ‘w’) as zip:
# write each file one by one
for file in file_paths:
zip.write(file)print(‘All files are zipped!’)
Python Kullanarak Dosyaları Açma
Zipfile modülünü kullanarak dosyaları açma uygulaması çok daha kolaydır. Zipfile paketini ZipFile modülünden içe aktarın ve ayıklamak istediğiniz zip dosyasının adını bir değişkende saklayın. İstisnaları işlemek ve ayıklamak istediğiniz dosyayı okuma modunda açmak için with deyimini kullanın. Zip’te bulunan dosyaların içindekiler tablosunu görüntülemek için printdir() işlevini kullanın .
Dosyaları ayıkladığınıza dair bir ilerleme mesajı görüntüleyin ve zip dosyasının içeriğini geçerli çalışma dizinine çıkarmak için extractall() işlevini kullanın. Alternatif olarak, programın dosyaları çıkardığı yolu değiştirmek için bir yol parametresi ekleyebilirsiniz.
İşlem tamamlandığında print deyimini kullanarak bir mesaj görüntüleyin .
# importing the required modules
from zipfile import ZipFile# pass the name of the zip file you want to extract
file_name = “extract.zip”# opening the zip file in read mode
with ZipFile(file_name, ‘r’) as zip:
# display the contents of the zip file
zip.printdir()# extracting all the files
print(‘Extract in progress…’)
zip.extractall()
print(‘All files are extracted!’)
Zip Dosyaları Hakkında Daha Fazla Bilgi
Zip dosyaları çok fazla popülerlik kazandı ve onlarca yıldır kullanılıyor. GitHub ve Google Drive gibi popüler web siteleri, bir dosya koleksiyonunu zip arşivi olarak indirmenize izin verir. Zip programı, bir dizi dosyayı tek bir pakette sıkıştırır. Bu, dosyaları bir arada paketleyen ancak sıkıştırmayan tar gibi bir aracın tersidir.
Dosyalarınızı daha verimli bir algoritma kullanarak şifrelemek istiyorsanız, gidilecek yol RAR dosyalarıdır. RAR, zip dosyaları tarafından kullanılan söndürme algoritmasından daha iyi olan AES-128 algoritmasını kullanır. Son olarak, ihtiyacınızı en iyi karşılayanı seçin.