logo

Lavorare con file zip in Python

Questo articolo spiega come eseguire varie operazioni su un file zip utilizzando un semplice programma Python. Cos'è un file zip? ZIP è un formato di file di archivio che supporta la compressione dei dati senza perdita di dati. Per compressione senza perdita intendiamo che l'algoritmo di compressione consente di ricostruire perfettamente i dati originali a partire dai dati compressi. Quindi un file ZIP è un singolo file contenente uno o più file compressi che offre un modo ideale per ridurre le dimensioni dei file di grandi dimensioni e tenere insieme i file correlati. Perché abbiamo bisogno dei file zip?
  • Per ridurre i requisiti di archiviazione.
  • Per migliorare la velocità di trasferimento rispetto alle connessioni standard.
Per lavorare su file zip utilizzando Python utilizzeremo un modulo Python integrato chiamato zipfile .

1. Estrazione di un file 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: Lavorare con file zip in Python' title=Proviamo a capire il codice sopra in pezzi:
  • 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 LEGGERE modalità e chiamarlo come cerniera lampo .
  • zip.printdir()
    printdir() Il metodo stampa un sommario per l'archivio.
  • zip.extractall()
    estrai tutto() Il metodo estrarrà tutto il contenuto del file zip nella directory di lavoro corrente. Puoi anche chiamare estrarre() 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. Scrittura su un file zip

Considera una directory (cartella) con questo formato: Lavorare con file zip in 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: Lavorare con file zip in Python' title=Proviamo a comprendere il codice sopra dividendolo in frammenti:
  • 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()  metodo. In ogni iterazione tutti i file presenti in quella directory vengono aggiunti a un elenco chiamato percorsi_file . Alla fine restituiamo tutti i percorsi dei file.
  • file_paths = get_all_file_paths(directory)
    Here we pass the directory to be zipped to the get_all_file_paths() funzione e ottenere un elenco contenente tutti i percorsi dei file.
  • 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 scrivere metodo.

3. Ottenere tutte le informazioni su un file 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 elenco informazioni() Il metodo crea un'istanza di ZipInfo classe che contiene tutte le informazioni sul file zip. Possiamo accedere a tutte le informazioni come la data dell'ultima modifica dei file, i nomi dei file, il sistema su cui sono stati creati i file, la versione zip, le dimensioni dei file in formato compresso e non compresso, ecc. Questo articolo è stato fornito da Nikhil Kumar . Crea quiz