Я пытаюсь создать временный файл для набора данных

#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