【问题标题】:For loop to download and extract zip files from urlFor loop to download and extract zip files from url
【发布时间】:2022-12-02 05:26:21
【问题描述】:

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 sn-p 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 sn-p 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')

【问题讨论】:

    标签: python-3.x for-loop zip


    【解决方案1】:

    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()
    

    【讨论】: