Импорт данных из github с использованием Python в блокноте Jupyter - PullRequest
0 голосов
/ 11 февраля 2020

Я использую книгу «Практическое машинное обучение с scikit-learn и tenorflow» от Aurelien Geron.

Я впервые использую Jupyter и Python.

I пытаюсь следовать следующему коду. enter image description here

Моя проблема в том, что я запускаю ячейку с этим кодом:

import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/"
HOUSING_PATH = os.path.join("datasets", "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
    os.makedirs(housing_path, exist_ok=True)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    urllib.request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path=housing_path)
    housing_tgz.close()

Оценка ячейки никогда не заканчивается, In[*]: никогда не становится чем-то как In[1]:.

Итак, я подумал, что это проблема с начальным URL, потому что он показывал ошибку, когда я посещал его через мой браузер inte rnet.

Следовательно, я изменил его на DOWNLOAD_ROOT = "https://github.com/ageron/handson-ml2/tree/master/".

Теперь я получаю In[1]:. Однако, когда я запускаю fetch_housing_data(), я получаю:

---------------------------------------------------------------------------
ReadError                                 Traceback (most recent call last)
<ipython-input-6-bd66b1fe6daf> in <module>
----> 1 fetch_housing_data()

<ipython-input-5-ef3c39b342d8> in fetch_housing_data(housing_url, housing_path)
      9     tgz_path = os.path.join(housing_path, "housing.tgz")
     10     urllib.request.urlretrieve(housing_url, tgz_path)
---> 11     housing_tgz = tarfile.open(tgz_path)
     12     housing_tgz.extractall(path=housing_path)
     13     housing_tgz.close()

~\Anaconda3\lib\tarfile.py in open(cls, name, mode, fileobj, bufsize, **kwargs)
   1576                         fileobj.seek(saved_pos)
   1577                     continue
-> 1578             raise ReadError("file could not be opened successfully")
   1579 
   1580         elif ":" in mode:

ReadError: file could not be opened successfully

Почему это происходит и как я могу это решить?

1 Ответ

0 голосов
/ 11 февраля 2020

Вы перезапустили свое ядро ​​и попытались запустить его снова?
То, что вы видите, не воспроизводимо.

Первый блок кода, который вы вставили выше, работает как написано. Нет необходимости изменять его.
Я просто запустил это ниже, а затем, когда я запустил fetch_housing_data() в другой ячейке, это сработало:

import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/"
HOUSING_PATH = os.path.join("datasets", "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
    os.makedirs(housing_path, exist_ok=True)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    urllib.request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path=housing_path)
    housing_tgz.close()

Вы уверены, что это не просто артефакт, который вы не делаете я не вижу, чтобы ячейка завершилась?
Если вы хотите независимо проверить, вы можете запустить ее в другом месте, как я. Я только что проверил это, перейдя здесь и нажав нижнюю ссылку launch binder. Затем я вставил ваш код в появившуюся ячейку. После запуска этих двух ячеек у меня есть каталог /home/jovyan/scripts/datasets/housing с содержимым housing.csv housing.tgz.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...