Skip to content

Instantly share code, notes, and snippets.

@valdergallo
Created April 23, 2014 21:06
Show Gist options
  • Save valdergallo/11232389 to your computer and use it in GitHub Desktop.
Save valdergallo/11232389 to your computer and use it in GitHub Desktop.
Download and unzip file
def download(url, save_to_diretory='.'):
def percent(downloaded, total_size):
return (math.floor((downloaded / total_size) * 100))
# Open the url
try:
req = urlopen(url)
#handle errors
except HTTPError, e:
print "HTTP Error:", e.code, url
except URLError, e:
print "URL Error:", e.reason, url
print "Downloading ", url
total_size = int(req.info().getheader('Content-Length').strip())
print 'Total Size ', math.floor(total_size / 1024)
downloaded = 0
CHUNK = 512
# Open our local file for writing
filename = os.path.basename(url)
save_to = os.path.join(save_to_diretory, filename)
with open(save_to, "wb") as local_file:
while True:
sys.stdout.write('\r')
try:
chunk = req.read(CHUNK)
except URLError, e:
print "HTTP Error:", e.code, url
print 'Try again on 20s ...'
time.sleep(20)
continue
downloaded += len(chunk)
per = percent(downloaded, total_size)
sys.stdout.write("[%-50s] %d%%" % ('=' * int(per / 2), per))
sys.stdout.flush()
local_file.write(chunk)
if not chunk:
sys.stdout.write('\n')
break
def unzip(zip_file, file_name_list=[], extract_to_dir='.'):
open_zip = zipfile.ZipFile(zip_file)
for file_name in file_name_list:
if file_name in open_zip.namelist() or file_name.endswith('.zip'):
open_zip.extract(file_name, extract_to_dir)
open_zip.close()
def download_unzip(url, file_name_list=[], save_to_diretory='.'):
download(url, save_to_diretory='.')
filename = os.path.basename(url)
full_path = os.path.join(filename, save_to_diretory)
if os.path.exists(full_path):
unzip(full_path, file_name_list, save_to_diretory)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment