使用urllib.request.urlretrieve部分下载文件

时间:2017-08-22 08:50:35

标签: python-3.x

我有这个代码试图从Git Hub存储库中检索文件。

import os
import tarfile
from six.moves import urllib
import urllib.request

DOWNLOAD_ROOT = "https://github.com/ageron/handson-ml/tree/master/"
HOUSING_PATH = os.path.join("datasets", "housing").replace("\\","/")
print(HOUSING_PATH)
HOUSING_URL = DOWNLOAD_ROOT + HOUSING_PATH
print(HOUSING_URL)
print(os.getcwd())

def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
    if not os.path.isdir(housing_path):
        os.makedirs(housing_path)
    tgz_path = os.path.join(housing_path, "housing.tgz").replace("\\","/")
    print(tgz_path)
    urllib.request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path=housing_path)
    housing_tgz.close()

fetch_housing_data()

执行代码后,我收到此错误 ReadError:文件无法成功打开。我确实检查了实际文件大小和执行此代码后下载的文件,我发现该文件已部分下载。 那么他们以任何方式下载整个文件?在此先感谢

1 个答案:

答案 0 :(得分:2)

最后我遇到了问题。这是我用来检索文件的链接。我不知道RAW链接应该与Git Hub存储库中的文件名一起使用(不使用文件名会给你404错误)。

所以我需要在我的问题中发布的实际代码中进行一些修改。 那是 :    从

更改链接
DOWNLOAD_ROOT = "https://github.com/ageron/handson-ml/tree/master/"

对此:

DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml/master/"

这个

HOUSING_URL = DOWNLOAD_ROOT + HOUSING_PATH

HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz" \\**( Actual File name is needed)**

谢谢!