utils.py 966 Bytes
Newer Older
soumith's avatar
soumith committed
1
import os
soumith's avatar
soumith committed
2
import os.path
soumith's avatar
soumith committed
3
4
5
import hashlib
import errno

soumith's avatar
soumith committed
6

7
8
9
def check_integrity(fpath, md5):
    if not os.path.isfile(fpath):
        return False
soumith's avatar
soumith committed
10
    md5o = hashlib.md5()
soumith's avatar
soumith committed
11
    with open(fpath, 'rb') as f:
soumith's avatar
soumith committed
12
        # read in 1MB chunks
13
        for chunk in iter(lambda: f.read(1024 * 1024), b''):
soumith's avatar
soumith committed
14
15
            md5o.update(chunk)
    md5c = md5o.hexdigest()
16
17
18
19
20
    if md5c != md5:
        return False
    return True


soumith's avatar
soumith committed
21
def download_url(url, root, filename, md5):
22
23
    from six.moves import urllib

24
    root = os.path.expanduser(root)
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    fpath = os.path.join(root, filename)

    try:
        os.makedirs(root)
    except OSError as e:
        if e.errno == errno.EEXIST:
            pass
        else:
            raise

    # downloads file
    if os.path.isfile(fpath) and check_integrity(fpath, md5):
        print('Using downloaded and verified file: ' + fpath)
    else:
        print('Downloading ' + url + ' to ' + fpath)
        urllib.request.urlretrieve(url, fpath)