logo

Lucrul cu fișiere zip în Python

Acest articol explică cum se pot efectua diverse operații pe un fișier zip folosind un program simplu python. Ce este un fișier zip? ZIP este un format de fișier de arhivă care acceptă compresia fără pierderi de date. Prin compresie fără pierderi înțelegem că algoritmul de compresie permite ca datele originale să fie reconstruite perfect din datele comprimate. Deci, un fișier ZIP este un singur fișier care conține unul sau mai multe fișiere comprimate, oferind o modalitate ideală de a face fișierele mari mai mici și de a păstra fișierele asociate împreună. De ce avem nevoie de fișiere zip?
  • Pentru a reduce cerințele de depozitare.
  • Pentru a îmbunătăți viteza de transfer prin conexiunile standard.
Pentru a lucra la fișiere zip folosind python, vom folosi un modul python încorporat numit zipfile .

1. Extragerea unui fișier zip

Python
# importing required modules from zipfile import ZipFile # specifying the zip file name file_name = 'my_python_files.zip' # opening the zip file in READ mode with ZipFile(file_name 'r') as zip: # printing all the contents of the zip file zip.printdir() # extracting all the files print('Extracting all the files now...') zip.extractall() print('Done!') 
The above program extracts a zip file named 'my_python_files.zip' in the same directory as of this python script. The output of above program may look like this: Lucrul cu fișiere zip în Python' title=Să încercăm să înțelegem codul de mai sus în bucăți:
  • from zipfile import ZipFile
    ZipFile is a class of zipfile module for reading and writing zip files. Here we import only class ZipFile from zipfile module.
  • with ZipFile(file_name 'r') as zip:
    Here a ZipFile object is made by calling ZipFile constructor which accepts zip file name and mode parameters. We create a ZipFile object in CITIRE modul și denumește-l ca fermoar .
  • zip.printdir()
    printdir() metoda imprimă un cuprins pentru arhivă.
  • zip.extractall()
    extractall() metoda va extrage tot conținutul fișierului zip în directorul de lucru curent. De asemenea, puteți suna extrage() method to extract any file by specifying its path in the zip file. For example:
    zip.extract('python_files/python_wiki.txt')
    This will extract only the specified file. If you want to read some specific file you can go like this:
    data = zip.read(name_of_file_to_read)

2. Scrierea într-un fișier zip

Luați în considerare un director (dosar) cu un astfel de format: Lucrul cu fișiere zip în Python' title= Here we will need to crawl the whole directory and its sub-directories in order to get a list of all file paths before writing them to a zip file. The following program does this by crawling the directory to be zipped: Python
# importing required modules from zipfile import ZipFile import os def get_all_file_paths(directory): # initializing empty file paths list file_paths = [] # crawling through directory and subdirectories for root directories files in os.walk(directory): for filename in files: # join the two strings in order to form the full filepath. filepath = os.path.join(root filename) file_paths.append(filepath) # returning all file paths return file_paths def main(): # path to folder which needs to be zipped directory = './python_files' # calling function to get all file paths in the directory file_paths = get_all_file_paths(directory) # printing the list of all files to be zipped print('Following files will be zipped:') for file_name in file_paths: print(file_name) # writing files to a zipfile with ZipFile('my_python_files.zip''w') as zip: # writing each file one by one for file in file_paths: zip.write(file) print('All files zipped successfully!') if __name__ == '__main__': main() 
The output of above program looks like this: Lucrul cu fișiere zip în Python' title=Să încercăm să înțelegem codul de mai sus împărțind în fragmente:
  • def get_all_file_paths(directory): file_paths = [] for root directories files in os.walk(directory): for filename in files: filepath = os.path.join(root filename) file_paths.append(filepath) return file_paths
    First of all to get all file paths in our directory we have created this function which uses the os.walk()  metodă. În fiecare iterație toate fișierele prezente în acel director sunt atașate unei liste numite căi_fișier . În final, returnăm toate căile fișierelor.
  • file_paths = get_all_file_paths(directory)
    Here we pass the directory to be zipped to the get_all_file_paths() funcția și obțineți o listă care conține toate căile fișierelor.
  • with ZipFile('my_python_files.zip''w') as zip:
    Here we create a ZipFile object in WRITE mode this time.
  • for file in file_paths: zip.write(file)
    Here we write all the files to the zip file one by one using scrie metodă.

3. Obținerea tuturor informațiilor despre un fișier zip



Python
# importing required modules from zipfile import ZipFile import datetime # specifying the zip file name file_name = 'example.zip' # opening the zip file in READ mode with ZipFile(file_name 'r') as zip: for info in zip.infolist(): print(info.filename) print('tModified:t' + str(datetime.datetime(*info.date_time))) print('tSystem:tt' + str(info.create_system) + '(0 = Windows 3 = Unix)') print('tZIP version:t' + str(info.create_version)) print('tCompressed:t' + str(info.compress_size) + ' bytes') print('tUncompressed:t' + str(info.file_size) + ' bytes') 
The output of above program may look like this: ' title=
for info in zip.infolist():
Here infolist() metoda creează o instanță de ZipInfo clasa care conține toate informațiile despre fișierul zip. Putem accesa toate informațiile, cum ar fi data ultimei modificări a fișierelor, sistemul de nume de fișiere pe care au fost create fișierele Dimensiunea versiunii Zip a fișierelor în formă comprimată și necomprimată etc. Acest articol este contribuit de către Nikhil Kumar . Creați un test