Comment charger / éditer / exécuter / enregistrer des fichiers texte (.py) dans une cellule de bloc-notes IPython?

232

Je suis récemment passé à l'utilisation de blocs-notes IPython dans le cadre de mon flux de travail. Cependant, je n'ai pas réussi à trouver un moyen d'importer des fichiers .py dans les cellules individuelles d'un bloc-notes IPython ouvert afin qu'ils puissent être modifiés, exécutés puis enregistrés. Cela peut-il être fait?

J'ai trouvé cela dans la documentation qui me dit comment importer des fichiers .py en tant que nouveaux blocs-notes, mais cela ne correspond pas à ce que je veux réaliser.

Toute suggestion serait très appréciée.

aaronsstack
la source
6
Bonne question. Je n'ai pas encore vu de réponse vraiment satisfaisante. C'est particulièrement important lorsque vous servez un bloc-notes IPython sur Internet. Si les gens veulent voir / modifier le code source des fonctions qui sont importées (avec mise en évidence de la syntaxe, etc.), il n'y a actuellement aucun moyen facile de le faire. Il devrait être possible d'ouvrir simplement les fichiers py sans les transformer en fichiers ipynb.
Peter

Réponses:

306

EDIT : À partir d'IPython 3 (maintenant le projet Jupyter), le bloc-notes dispose d'un éditeur de texte qui peut être utilisé comme une alternative plus pratique pour charger / éditer / enregistrer des fichiers texte.

Un fichier texte peut être chargé dans une cellule de bloc-notes avec la commande magique %load.

Si vous exécutez une cellule contenant:

%load filename.py

le contenu de filename.pysera chargé dans la cellule suivante. Vous pouvez le modifier et l'exécuter comme d'habitude.

Pour sauvegarder le contenu de la cellule dans un fichier, ajoutez la cellule magique %%writefile filename.pyau début de la cellule et exécutez-la. Attention, si un fichier du même nom existe déjà, il sera écrasé en silence .

Pour voir l'aide pour toute commande magique, ajoutez un ?: comme %load?ou %%writefile?.

Pour obtenir une aide générale sur les fonctions magiques, tapez "% magic" Pour obtenir la liste des fonctions magiques disponibles, utilisez% lsmagic. Pour une description de l'un d'entre eux, tapez% magic_name?, Par exemple '% cd?'.

Voir aussi: Fonctions Magic des documents officiels IPython.

user2304916
la source
3
Cela, en plus, %save -fsemble être la façon de faire ce que je cherchais. Merci!
aaronsstack
2
save -fest une sorte de méthode indirecte d'enregistrement dans un fichier et ne fonctionnera que si vous exécutez d'abord la cellule, puis fournissez la bonne référence. En général, il est plus facile à utiliser %%writefilequi écrit la cellule actuelle dans un fichier. J'ai mis à jour la réponse pour le mentionner.
user2304916
4
La nouvelle commande magique est actuellement %loadpy(au lieu de %load).
AlQuemist
1
selon ipython.org/ipython-doc/3/interactive/magics.html l' utilisation %loadest très bien, aller de l'avant: " %loadpy ( Alias ​​de %load ) - %loadpya gagné en flexibilité et a supprimé l'exigence d'une .pyextension. Il a donc été renommé simplement en %load. Vous pouvez consulter %loaddocstring pour plus d'informations. "
michael
118

Pour écrire / enregistrer

%%writefile myfile.py

  • écrire / enregistrer le contenu des cellules dans monfichier.py (utiliser -apour ajouter). Un autre alias:%%file myfile.py

Courir

%run myfile.py

  • exécuter myfile.py et afficher les résultats dans la cellule actuelle

Pour charger / importer

%load myfile.py

  • charger "import" monfichier.py dans la cellule courante

Pour plus de magie et d'aide

%lsmagic

  • liste toutes les autres commandes magiques de cellules cool.

%COMMAND-NAME?

  • pour savoir comment utiliser une certaine commande. c'est à dire%run?

Remarque

En plus des commandes cell magic, le bloc-notes IPython (maintenant le bloc-notes Jupyter) est tellement cool qu'il vous permet d'utiliser n'importe quelle commande unix directement à partir de la cellule (cela équivaut également à utiliser la %%bashcommande cell magic).

Pour exécuter une commande unix à partir de la cellule, faites simplement précéder votre commande de la !marque. par exemple:

  • !python --version voir votre version python
  • !python myfile.pyexécutez myfile.py et affichez les résultats dans la cellule actuelle, tout comme %run(voir la différence entre !pythonet %rundans les commentaires ci-dessous).

Consultez également ce nbviewer pour plus d'explications avec des exemples. J'espère que cela t'aides.

Aziz Alto
la source
1
Merci, j'utilise windows et j'ai essayé! Dir, output !dir Volume in drive D is Documentsetc ... Donc ce n'est pas seulement bash mais aussi cmd!
brian
1
@iamaziz Je pense que tu voulais dire !python --version(faute de frappe)
Alexandre
5
Aziz, c'est une excellente réponse. Une petite note: c'est très légèrement différent à utiliser %run myfile.pypar opposition à !python myfile.py. Si vous faites le premier, il s'exécutera en utilisant le noyau ipython, y compris le préchargement configuré. Un petit problème, mais j'ai rencontré un bug aujourd'hui où cela a fait une différence pour moi.
Tristan Reid
Si vous souhaitez faire l'équivalent de ce qui est %run myfile.pydécrit dans cette réponse tout en incluant des commandes de magie de cellule IPython dans votre script, utilisez %run myfile.ipy.
Wayne
8

Faites glisser et déposez un fichier Python dans le tableau des carnets de notes "home" des carnets Ipython, cliquez sur télécharger. Cela créera un nouveau bloc-notes avec une seule cellule contenant le contenu de votre fichier .py

Sinon, copiez / collez à partir de votre éditeur préféré;)

Raphaël Braud
la source
1
Merci pour votre réponse, mais comme je l'ai mentionné dans le corps de mon message, je cherche à éviter de créer un nouveau bloc-notes à chaque fois mais de conserver le script .py à partir d'une cellule d'un bloc-notes existant.
aaronsstack
Réparez-moi si je me trompe: vous n'avez pas l'habitude d'utiliser le bloc-notes comme éditeur de texte? (Je veux dire: chaque modification dans la cellule ne changera pas le fichier .py). Soit dit en passant, je n'ai aucune idée d'une manière native d'insérer un contenu .py dans une cellule, je copie / colle toujours mon code en cas de besoin ... désolé
Raphaël Braud
5

J'ai trouvé satisfaisant d'utiliser ls et cd dans le cahier ipython pour trouver le fichier. Tapez ensuite cat your_file_name dans la cellule, et vous récupérerez le contenu du fichier, que vous pourrez ensuite coller dans la cellule sous forme de code.

RussellStewart
la source
!cat "file.txt"
Enrique Pérez Herrero