#python #jupyter-notebook #urllib
#python #jupyter-ноутбук #urllib
Вопрос:
не уверен, почему возникает эта ошибка, когда ссылка работает. Когда я нажимаю на ссылку, я попадаю к необработанным данным, однако, когда я запускаю код, я получаю ошибку 404.
import pandas as pd
import os
import tarfile
from six.moves import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data"
TESLA_PATH = os.path.join("datasets", "tesla")
TESLA_URL = DOWNLOAD_ROOT "datasets/tesla/tesla.tgz"
def fetch_tesla_data(tesla_url=TESLA_URL, tesla_path=TESLA_PATH):
if not os.path.isdir(tesla_path):
os.makedirs(tesla_path)
tgz_path = os.path.join(tesla_path, "tesla.tgz")
urllib.request.urlretrieve(tesla_url, tgz_path)
tesla_tgz = tarfile.open(tgz_path)
tesla_tgz.extractall(path=tesla_path)
tesla_tgz.close()
fetch_tesla_data()
Комментарии:
1. Неверно, что «ссылка работает» . Попробуйте
print(tesla_url)
и посмотрите, что это за ссылка.2.
https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data
работает, но ни одна из комбинаций, которые я мог придумать с различными фрагментами текста, которые у вас там есть, не работает. Пожалуйста, укажите полный URL, по которому, как вы ожидаете, будет отправлен ваш код (и это действительно работает).3. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.
4. это правильный URL. Я изменил код на основе вашего отзыва, но я застрял при получении файла.
5. этот URL выдает необработанный текст вместо
.tgz
и вам не нужноtarfile
Ответ №1:
URL, который вы ввели, был неправильным. TESLA_URL является https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_datadatasets/tesla/tesla.tgz
Фактический URL https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data
Вы добавили несколько слов к URL, которые отличают его от оригинала.
Просто измените свой код на приведенный ниже
import pandas as pd
import os
import tarfile
from six.moves import urllib
TESLA_PATH = os.path.join("datasets", "tesla")
# This is what I changed
# I got rid of DOWNLOAD_ROOT and just threw the link in TESLA_URL
TESLA_URL = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data"
def fetch_tesla_data(tesla_url=TESLA_URL, tesla_path=TESLA_PATH):
if not os.path.isdir(tesla_path):
os.makedirs(tesla_path)
tgz_path = os.path.join(tesla_path, "tesla.tgz")
urllib.request.urlretrieve(tesla_url, tgz_path)
tesla_tgz = tarfile.open(tgz_path)
tesla_tgz.extractall(path=tesla_path)
tesla_tgz.close()
fetch_tesla_data()
Комментарии:
1. теперь у вас есть правильный URL, но он выдает необработанный текст вместо
.tgz
поэтому вам не нужно использоватьtarfile
и извлекать его.2. просто сохраните его как .csv. судя по последнему коммиту, сделанному автором, файл имеет вид .csv
3. как еще я мог бы его извлечь
4. @IsaiahCruz вам не нужно добавлять его — он не сжат. Вы должны написать это как есть.
5. спасибо всем за помощь, я смог разобраться [РЕДАКТИРОВАТЬ: я солгал]
Ответ №2:
Есть две проблемы
-
неправильный URL -ему нужен только
DOWNLOAD_ROOT
без"datasets/tesla/tesla.tgz"
-
он выдает необработанный текст (не сжатый файл), и ему не нужно
tarfile
иextractall
import os
from six.moves import urllib
URL = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data"
LOCAL_FOLDER = "datasets" # or "datasets/tesla"
LOCAL_FILENAME = "tesla.csv"
LOCAL_PATH = os.path.join(LOCAL_FOLDER, LOCAL_FILENAME)
os.makedirs(LOCAL_FOLDER, exist_ok=True)
urllib.request.urlretrieve(URL, LOCAL_PATH)
df = pd.read_csv(LOCAL_PATH)
print(df)
Вот и все.