JupyterHub: How to download all files and folder hierarchy from Jupyter Notebook?
Проходишь курс по data science, смотришь лекции, а тебе в JupyterHub от преподавателя вывалили гору ноутбуков, датасетов и скриптов. Структура красивая, все по
Проходишь курс по data science, смотришь лекции, а тебе в JupyterHub от преподавателя вывалили гору ноутбуков, датасетов и скриптов. Структура красивая, все по папочкам. Хочется сохранить это добро на будущее, а кнопки «скачать всё» нет.
Ты начинаешь кликать. Файл, download, ещё файл, download. Через пять минут понимаешь, что это путь в никуда. Ручное скачивание — это ад, особенно когда папок больше трёх.
Решение в самом Jupyter
К счастью, Jupyter — это по сути Python. Значит, можно написать код, который сделает всё за тебя. Прямо в интерфейсе.
Создаёшь новый ноутбук (New -> Notebook) в корневой папке, откуда нужно всё забрать. Копируешь в первую ячейку этот код:
import os
import tarfile
def recursive_files(dir_name='.', ignore=None):
for dir_name,subdirs,files in os.walk(dir_name):
if ignore and os.path.basename(dir_name) in ignore:
continue
for file_name in files:
if ignore and file_name in ignore:
continue
yield os.path.join(dir_name, file_name)
def make_tar_file(dir_name='.', tar_file_name='tarfile.tar', ignore=None):
tar = tarfile.open(tar_file_name, 'w')
for file_name in recursive_files(dir_name, ignore):
tar.add(file_name)
tar.close()
dir_name = '.'
tar_file_name = 'archive.tar'
ignore = {'.ipynb_checkpoints', '__pycache__', tar_file_name}
make_tar_file(dir_name, tar_file_name, ignore)
Запускаешь ячейку (Shift+Enter). Через пару секунд в той же корневой папке появится файл archive.tar.
Что делает этот код
Он рекурсивно обходит все папки, начиная с текущей (.) и упаковывает каждую найденную папку и файл в tar-архив. Это как tar -cf в Linux, но изнутри ноутбука.
Ключевой момент — параметр ignore. Он исключает из архива служебные директории, которые тебе не нужны: .ipynb_checkpoints (скрытые файлы автосохранения Jupyter) и __pycache__ (кеш Python). Исключает он и сам создаваемый архив, чтобы не пытаться добавить сам в себя.
Всё. Архив создан. Теперь ты можешь просто нажать на файл archive.tar в интерфейсе JupyterHub и скачать его одной кнопкой.
Распаковать потом можно любой утилитой: tar -xf archive.tar в терминале, или 7-Zip на Windows, или через файловый менеджер.
Если что-то пошло не так
Проверь, что запускаешь ноутбук именно из той корневой директории, которую хочешь архивировать. Посмотри на путь вверху интерфейса.
Убедись, что у тебя есть права на чтение всех файлов — в учебном окружении это обычно не проблема.
И главное — не игнорируй логику исключений. Если в проекте есть свои __pycache__ или другие служебные данные, добавь их в множество ignore, чтобы не тащить в архив лишнее.
Этот способ — панацея от рутины. Сохраняешь структуру, экономишь нервы и время. Теперь можно спокойно закрывать вкладку курса, зная, что всё ценное уже у тебя.