【动手学深度学习】(九)Kaggle房价预测

文章目录

  • 一、代码
    • 1.下载和缓存数据集
  • 【相关总结】
    • 1.os.makedirs()
    • 2.os.path.join()
    • 3.os.path.exits()
    • 4.os.path.dirname()

一、代码

题目链接

1.下载和缓存数据集

建立字典DATA_HUB,将数据集名称的字符串映射到数据集相关的二元组上,这个二元组包含数据集的url和验证文件完整性的sha-1密钥

import hashlib
import os
import tarfile
import zipfile
import requests

#@save
DATA_HUB = dict()
DATA_URL = 'http://d2l-data.s3-accelerate.amazonaws.com/'

定义download函数用来下载数据集,并返回下载文件的名称。 如果缓存目录中已经存在此数据集文件,并且其sha-1与存储在DATA_HUB中的相匹配, 我们将使用缓存的文件。

def download(name, cache_dir=os.path.join('..', 'data')):  #@save
    """下载一个DATA_HUB中的文件,返回本地文件名"""
    assert name in DATA_HUB, f"{name} 不存在于 {DATA_HUB}"
    url, sha1_hash = DATA_HUB[name]
#   递归创建目录
    os.makedirs(cache_dir, exist_ok=True)
    fname = os.path.join(cache_dir, url.split('/')[-1])
    
    # 检查本地是否已有缓存文件,如果有并且哈希值匹配,则直接返回本地文件路径
    if os.path.exists(fname):
        sha1 = hashlib.sha1()
        with open(fname, 'rb') as f:
            while True:
                data = f.read(1048576)
                if not data:
                    break
                sha1.update(data)
        if sha1.hexdigest() == sha1_hash:
            return fname  # 命中缓存
    print(f'正在从{url}下载{fname}...')
    r = requests.get(url, stream=True, verify=True)
    with open(fname, 'wb') as f:
        f.write(r.content)
    return fname

实现两个实用函数分别用于:下载并解压zip和tar文件,另一个是将所有数据集从DATA_HUB下载到缓存目录中。

def download_extract(name, folder=None):  #@save
    """下载并解压zip/tar文件"""
    fname = download(name)
    base_dir = os.path.dirname(fname)
    data_dir, ext = os.path.splitext(fname)
    if ext == '.zip':
        fp = zipfile.ZipFile(fname, 'r')
    elif ext in ('.tar', '.gz'):
        fp = tarfile.open(fname, 'r')
    else:
        assert False, '只有zip/tar文件可以被解压缩'
    fp.extractall(base_dir)
    return os.path.join(base_dir, folder) if folder else data_dir

def download_all():  #@save
    """下载DATA_HUB中的所有文件"""
    for name in DATA_HUB:
        download(name)

【相关总结】

1.os.makedirs()

用于递归地创建目录
os.makedirs(path, mode, exist_ok=False)
path:要创建的目录,可以为相对路径或绝对路径
mode:指定权重模式
False表示当目标目录已存在时,抛出OSError

os.makedirs(cache_dir, exist_ok=True)

2.os.path.join()

os.path.join()用来拼接多个路径字符串。

import os

path1 = 'a'
path2 = 'b'
path3 = 'c'

path = os.path.join(path1,path2,path3)
print(path)

a\b\c

3.os.path.exits()

判断文件或者文件夹是否存在

import os
path_exits = os.path.exists('../data')
print(path)

True

4.os.path.dirname()

获取文件所在目录路径

import os

import sys

# print(sys.path[0])
fname = sys.path[0] # 输出当前文件所在目录
file = '../src/09test.ipynb'
print(fname)   
# print (os.path.abspath('.')) 
dir = os.path.dirname(fname)
file_dir = os.path.dirname(file)
print(dir)
print(file_dir)


你可能感兴趣的:(#,动手学深度学习,深度学习,人工智能)