Home > Mobile >  For loop to download and extract zip files from url
For loop to download and extract zip files from url

Time:12-02

Does anyone have some suggestions for why I can't get this code to do what I want it to do? I'm trying to write a script that will save me several hours each week. I need to download 83 zip files, extract them, import them into ArcGIS Pro, and then run the files through a series of geoprocessing tools, and then compile the results. Right now I'm doing this manually, and I'd love to automate this process as much as possible.

I can use the following snippet of code to download and extract one file. I can't seem to get it to work with a for loop though.

import requests, zipfile
from io import BytesIO

url = 'https://www.deq.state.mi.us/gis-data/downloads/waterwells/Alcona_WaterWells.zip'

filename = url.split('/')[-1]

req = requests.get(url)

zipfile = zipfile.ZipFile(BytesIO(req.content))
zipfile.extractall(r'C:\Users\UserName\Downloads\Water_Wells')

I have created a url list of all 83 urls. These don't change, and content is updated regularly. This for loop only returns the first county, just like the above snippet of code. I'm only including a few of the files here.

url_list = ['https://www.deq.state.mi.us/gis-data/downloads/waterwells/Alcona_WaterWells.zip',
           'https://www.deq.state.mi.us/gis-data/downloads/waterwells/Alger_WaterWells.zip',
           'https://www.deq.state.mi.us/gis-data/downloads/waterwells/Allegan_WaterWells.zip']

for link in url_list:
    filename = url.split('/')[-1]

    req = requests.get(url)

zipfile = zipfile.ZipFile(BytesIO(req.content))
zipfile.extractall(r'C:\Users\UserName\Downloads\Water_Wells')

CodePudding user response:

You may try the following approach:

import urllib.request
import zipfile

urls = [url1, url2, url3]

for url in urls:
    filename = url.split('/')[-1]
    urllib.request.urlretrieve(url, filename)
    with zipfile.ZipFile(filename, 'r') as zip_ref:
        zip_ref.extractall()
  • Related