logo

Werken met zip-bestanden in Python

In dit artikel wordt uitgelegd hoe u met een eenvoudig Python-programma verschillende bewerkingen op een zipbestand kunt uitvoeren. Wat is een zipbestand? ZIP is een archiefbestandsformaat dat verliesvrije gegevenscompressie ondersteunt. Met verliesvrije compressie bedoelen we dat het compressie-algoritme ervoor zorgt dat de originele gegevens perfect kunnen worden gereconstrueerd uit de gecomprimeerde gegevens. Een ZIP-bestand is dus een enkel bestand dat een of meer gecomprimeerde bestanden bevat en een ideale manier biedt om grote bestanden kleiner te maken en gerelateerde bestanden bij elkaar te houden. Waarom hebben we zip-bestanden nodig?
  • Om de opslagvereisten te verminderen.
  • Om de overdrachtssnelheid via standaardverbindingen te verbeteren.
Om met Python aan zip-bestanden te werken, gebruiken we een ingebouwde Python-module genaamd zipbestand .

1. Een zipbestand uitpakken

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: Werken met zip-bestanden in Python' title=Laten we proberen de bovenstaande code in stukjes te begrijpen:
  • 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 LEZEN modus en noem het als ritssluiting .
  • zip.printdir()
    printdir() methode drukt een inhoudsopgave voor het archief af.
  • zip.extractall()
    extraheer() methode extraheert de volledige inhoud van het zipbestand naar de huidige werkmap. Bellen kan ook extract() 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. Schrijven naar een zipbestand

Overweeg een map (map) met een dergelijk formaat: Werken met zip-bestanden 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: Werken met zip-bestanden in Python' title=Laten we proberen bovenstaande code te begrijpen door deze in fragmenten te verdelen:
  • 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()  methode. In elke iteratie worden alle bestanden in die map toegevoegd aan een lijst genaamd bestandspaden . Uiteindelijk retourneren we alle bestandspaden.
  • file_paths = get_all_file_paths(directory)
    Here we pass the directory to be zipped to the get_all_file_paths() functie en verkrijg een lijst met alle bestandspaden.
  • 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 schrijven methode.

3. Alle informatie over een zipbestand verkrijgen



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 infolijst() methode maakt een exemplaar van ZipInfo klasse die alle informatie over het zipbestand bevat. We hebben toegang tot alle informatie, zoals de laatste wijzigingsdatum van bestanden, bestandsnamen, systeem waarop bestanden zijn gemaakt, Zip-versie, grootte van bestanden in gecomprimeerde en ongecomprimeerde vorm, enz. Dit artikel is bijgedragen door Nikhil Kumar . Quiz maken