Source code for halotools.utils.io_utils
from __future__ import absolute_import, division, print_function, unicode_literals
from time import time
import sys
import urllib
__all__ = ["file_len", "download_file_from_url"]
[docs]
def file_len(fname):
with open(fname) as f:
for i, l in enumerate(f):
pass
return i + 1
[docs]
def download_file_from_url(url, fname):
"""Function to download a file from the web to a specific location,
and print a progress bar along the way.
Parameters
----------
url : string
web location of desired file, e.g.,
``http://www.some.website.com/somefile.txt``.
fname : string
Location and filename to store the downloaded file, e.g.,
``/Users/username/dirname/possibly_new_filename.txt``
"""
start = time()
print("\n... Downloading data from the following location: \n%s\n" % url)
print(" ... Saving the data with the following filename: \n%s\n" % fname)
def reporthook(blocks_thus_far, bytes_per_block, file_size_in_bytes):
try:
blocks_in_file = int(round(file_size_in_bytes / bytes_per_block))
printout_condition = int(round(blocks_in_file / 20))
if (blocks_thus_far % printout_condition == 0) & (blocks_thus_far > 0):
frac_complete = blocks_thus_far / float(blocks_in_file)
runtime = time() - start
print(
"{0:.0f}% complete, elapsed time = {1:.0f} seconds".format(
frac_complete * 100, runtime
)
)
except ZeroDivisionError:
pass
sys.stdout.flush()
urllib.request.urlretrieve(url, fname, reporthook)