Come caricare / modificare / eseguire / salvare file di testo (.py) in una cella di notebook IPython?


232

Di recente sono passato all'utilizzo dei notebook IPython come parte del mio flusso di lavoro. Tuttavia, non sono riuscito a trovare un modo per importare file .py nelle singole celle di un notebook IPython aperto in modo che possano essere modificati, eseguiti e quindi salvati. Può essere fatto?

Ho trovato questo nella documentazione che mi dice come importare i file .py come nuovi blocchi note, ma questo non è all'altezza di ciò che voglio ottenere.

Qualsiasi suggerimento sarebbe molto apprezzato.


6
Buona domanda. Devo ancora vedere una risposta davvero soddisfacente. È particolarmente importante quando si serve un notebook IPython su Internet. Se le persone vogliono vedere / modificare il codice sorgente delle funzioni importate (con l'evidenziazione della sintassi, ecc.) Al momento non esiste un modo semplice per farlo. Dovrebbe essere possibile aprire solo i file PY senza trasformarli in file ipynb.
Peter

Risposte:


306

EDIT : a partire da IPython 3 (ora progetto Jupyter), il notebook ha un editor di testo che può essere usato come alternativa più conveniente per caricare / modificare / salvare file di testo.

Un file di testo può essere caricato in una cella di notebook con il comando magico %load.

Se esegui una cella contenente:

%load filename.py

il contenuto di filename.pyverrà caricato nella cella successiva. Puoi modificarlo ed eseguirlo come al solito.

Per salvare il contenuto della cella in un file, aggiungi cell-magic %%writefile filename.pyall'inizio della cella ed eseguilo. Attenzione che se esiste già un file con lo stesso nome, questo verrà automaticamente sovrascritto .

Per vedere l'aiuto per qualsiasi comando magico aggiungi un ?: like %load?o %%writefile?.

Per un aiuto generale sulle funzioni magiche, digita "% magic" Per un elenco delle funzioni magiche disponibili, usa% lsmagic. Per una descrizione di uno di essi, digita% magic_name ?, ad esempio '% cd?'.

Vedi anche: Funzioni magiche dai documenti IPython ufficiali.


3
Questo, in più, %save -fsembra essere il modo di fare quello che stavo cercando. Grazie!
Aaronsstack

2
save -fè una sorta di modo indiretto di salvare in un file e funzionerà solo se esegui prima la cella e poi fornisci il riferimento giusto. In generale è più facile da usare %%writefileche scrive la cella corrente in un file. Ho aggiornato la risposta per menzionarlo.
user2304916

4
Il nuovo comando magico è attualmente %loadpy(anziché %load).
AlQuemist,

1
secondo ipython.org/ipython-doc/3/interactive/magics.html l' utilizzo %loadva bene, andando avanti: " %loadpy ( Alias ​​di %load ) - %loadpyha acquisito una certa flessibilità e abbandonato il requisito di .pyun'estensione. Quindi è stato rinominato semplicemente in %loadPuoi consultare %loaddocstring per maggiori informazioni. "
michael

118

Per scrivere / salvare

%%writefile myfile.py

  • scrivere / salvare il contenuto della cella in myfile.py (usare -aper aggiungere). Un altro alias:%%file myfile.py

Correre

%run myfile.py

  • eseguire myfile.py e produrre risultati nella cella corrente

Per caricare / importare

%load myfile.py

  • carica "import" myfile.py nella cella corrente

Per più magia e aiuto

%lsmagic

  • elenca tutti gli altri fantastici comandi di magia cellulare.

%COMMAND-NAME?

  • per aiuto su come usare un certo comando. vale a dire%run?

Nota

Oltre ai comandi di magia della cella, il taccuino IPython (ora taccuino di Jupyter) è così bello che ti permette di usare qualsiasi comando unix direttamente dalla cella (questo equivale anche all'utilizzo del %%bashcomando di magia della cella).

Per eseguire un comando unix dalla cella, basta precedere il comando con il !segno. per esempio:

  • !python --version vedi la tua versione di Python
  • !python myfile.pyesegui myfile.py e genera i risultati nella cella corrente, proprio come %run(vedi la differenza tra !pythone %runnei commenti sotto).

Inoltre, vedi questo nbviewer per ulteriori spiegazioni con esempi. Spero che questo ti aiuti.


1
Grazie, uso Windows e ho provato! Dir, output !dir Volume in drive D is Documentsecc ... Quindi non è solo bash ma anche cmd!
Brian

1
@iamaziz Penso che volevi dire !python --version(errore di battitura)
Alexandre,

5
Aziz, questa è una risposta eccellente. Una piccola nota: è leggermente diverso da usare %run myfile.pyrispetto a !python myfile.py. Se lo fai il primo verrà eseguito usando il kernel ipython, incluso qualsiasi precaricamento sia configurato. Un piccolo problema, ma oggi ho riscontrato un bug in cui ha fatto la differenza per me.
Tristan Reid,

Se vuoi fare l'equivalente di quello %run myfile.pydescritto in questa risposta includendo i comandi di magia cellulare IPython nel tuo script, usa %run myfile.ipy.
Wayne,

8

Trascina e rilascia un file Python nella tabella dei notebook "home" dei notebook Ipython, fai clic su upload. Questo creerà un nuovo notebook con una sola cella contenente il contenuto del tuo file .py

Altrimenti copia / incolla dal tuo editor preferito;)


1
Grazie per la tua risposta, ma come ho detto nel corpo del mio post, sto cercando di evitare di creare un nuovo blocco note ogni volta, ma mantenere lo script .py all'interno di una cella di un blocco appunti esistente.
Aaronsstack

Risolvimi se sbaglio: non vuoi usare il notebook come editor di testo? (Voglio dire: ogni modifica nella cella non cambierà il file .py). A proposito, non ho idea di un modo nativo per inserire un contenuto .py in una cella, copio sempre / incollo il mio codice quando necessario ... scusa
Raphaël Braud

5

Ho trovato soddisfacente usare ls e cd all'interno del notebook ipython per trovare il file. Quindi digita cat your_file_name nella cella e otterrai il contenuto del file, che puoi quindi incollare nella cella come codice.


!cat "file.txt"
Enrique Pérez Herrero,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.