#python #module #dataset
#питон #модуль #набор данных
Вопрос:
Я пытаюсь использовать чужой код для загрузки набора данных MNIST во временное местоположение (tmp), но я получаю No such file or directory: ...
Я попытался добавить закомментированную строку ниже, чтобы заставить ее создать каталог, но это должно быть создание файла.
def fetch(url):
import requests, gzip, os, hashlib, numpy
# os.makedirs("/tmp" hashlib.md5(url.encode('utf-8')).hexdigest(), exist_ok=True)
fp = os.path.join('/tmp', hashlib.md5(url.encode('utf-8')).hexdigest())
if not os.path.isfile(fp):
with open(fp, "rb") as f:
dat = f.read()
else:
with open(fp, "wb") as f:
dat = requests.get(url).content
f.write(dat)
return numpy.frombuffer(gzip.decompress(dat), dtype=np.uint8)
X_train = fetch('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz')[0x10:].reshape((-1, 28, 28))
Y_train = fetch('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz')[8:]
X_test = fetch('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz')[0x10:].reshape((-1, 28, 28))
Y_test = fetch('http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz')[8:]
Моя полная ошибка заключается в следующем
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-9-dd8a9f8c88af> in <module>
11 f.write(dat)
12 return numpy.frombuffer(gzip.decompress(dat), dtype=np.uint8)
---> 13 X_train = fetch('http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz')[0x10:].reshape((-1, 28, 28))
14 Y_train = fetch('http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz')[8:]
15 X_test = fetch('http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz')[0x10:].reshape((-1, 28, 28))
<ipython-input-9-dd8a9f8c88af> in fetch(url)
4 fp = os.path.join("/tmp", hashlib.md5(url.encode('utf-8')).hexdigest())
5 if not os.path.isfile(fp):
----> 6 with open(fp, "rb") as f:
7 dat = f.read()
8 else:
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/23278f029ff68f1e993776e500ce06b9'
Код взят из этого видео от Geohotz
Комментарии:
1. «Если сгенерированное имя файла не является файлом, откройте его для чтения» — удаление «не» из if должно вам помочь.
2. Я думал, что это то, для чего
else
это было.3. Нет, подождите, это работает. Я разобрал его и вижу, что вы правы. Интересно, почему Джордж Хотц включил это в свой код. Это находится в ссылке в OP в начале видео. Спасибо.
Ответ №1:
Один из способов решить эту проблему — заметить, что, когда файл с заданным именем файла отсутствует на диске, мы создаем его, используя флаг x в функции open . Что-то вроде этого
if not os.path.isfile(fp):
open(fp, "x")
with open(fp, "wb") as f:
dat = requests.get(url).content
print("Writing ", dat)
f.write(dat)
Вот ссылка на функцию open() в python3