web-dev-qa-db-fra.com

Comment télécharger tous les fichiers et la hiérarchie des dossiers depuis Jupyter Notebook?

Si je veux télécharger tous les fichiers et la hiérarchie des dossiers à partir de Jupyter Notebook comme indiqué dans l'image, savez-vous s'il y a de toute façon à le faire par un simple clic autre que d'aller à chaque fichier dans chaque dossier pour ouvrir le fichier et cliquez sur télécharger des centaines de fois?

enter image description here

Remarque: Ce bloc-notes Jupyter est créé par l'enseignant du cours en ligne, il n'est donc pas ouvert à partir de mon application Acaconda locale mais à la place de la page Web du cours en ligne. Le téléchargement sert à rafraîchir la mémoire à tout moment.

10
Jason
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)

Pour l'utiliser, créez simplement un nouveau bloc-notes .ipynb dans le dossier racine, celui que vous souhaitez télécharger. Copiez et collez ensuite le code ci-dessus dans la première cellule et exécutez-le.

Quand c'est fait - vous verrez un fichier tar créé dans le même dossier, qui contient tous les fichiers et sous-dossiers.

18
Jason

La réponse publiée ci-dessus fonctionne principalement, mais ses liens de copie au lieu des fichiers vers lesquels pointent les liens. Si vous ajoutez dereference = True comme argument à tarfile.open, vous obtiendrez les fichiers eux-mêmes.

    tar = tarfile.open(tar_file_name, 'w', dereference=True)
2
Rhombus