Download and Unzip a Zipped File in Python
In this example code, we will download a zipped file from the internet and then unzip it after the download is complete. We will also retrieve all the file names from the output directory by their extension.
import urllib.request
import os
import fnmatch
import zipfile
def download_and_unzip(download_url_link, dir_path, zipped_filename,destination_dir_name):
print("Download starting")
urllib.request.urlretrieve(
download_url_link, os.path.join(dir_path, zipped_filename)
)
print("Download complete")
print("unzipping file starting")
with zipfile.ZipFile(os.path.join(dir_path, zipped_filename), "r") as zip_file:
zip_file.extractall(os.path.join(dir_path, destination_dir_name))
print("unzipping complete")
def get_unzipped_filenames(path, pattern):
print("Getting unzipped files")
results = []
for root, dirs, files in os.walk(path):
for name in files:
if fnmatch.fnmatch(name, pattern):
results.append(name)
print("File unzipping complete : ")
return results
if __name__ == "__main__":
#link from where the file will be downloaded
download_url_link = "https://www.python.org/ftp/python/3.10.1/python-3.10.1-embed-amd64.zip"
#download zipped file name
zipped_filename = "python.zip"
#directory name where the downloaded file will be extracted
last_index = zipped_filename.rfind(".")
destination_dir_name = zipped_filename[0:last_index]
dir_path = os.path.dirname(os.path.realpath(__file__))
extracted_to_dir = os.path.join(dir_path, destination_dir_name)
#pattern to find all the .dll files
filename_pattern = "*.dll"
download_and_unzip(download_url_link, dir_path,zipped_filename, extracted_to_dir)
extracted_filenames = get_unzipped_filenames(extracted_to_dir, filename_pattern)
print("Unzipped files : ", extracted_filenames)