2015-01-16 15 views
7

Mi piacerebbe essere in grado di salvare l'output TEXT di un notebook iPython cell in un file su disco.come salvare l'output di una cella nel notebook iPython?

Ho 2 ulteriori requisiti/richieste:

  • essere in grado di eseguire nuovamente la cella e sovrascrivere la mia uscita con qualunque sia l'ultima è.
  • visualizza anche l'output all'interno del notebook.

ho capito come usare la magia %%capture per qualche risparmio di base delle cellule di un notebook ipython in un file, ma non sembra abbastanza flessibile: mantiene aggiungendo ogni volta che ho ri-eseguire il cellulare e ho non è possibile visualizzarlo all'interno della stessa cella.

Ecco quello che ho finora:

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 

# clear the cap by deleting the variable here? 
# del cap 

Quando provo a mettere cap.show() dopo la scrittura, che non sembra per visualizzare. Invece, mette l'output nella variabile cap due volte.

+1

Vuoi * tutto * l'output testuale o solo quello creato dalle istruzioni di stampa? A causa del meccanismo di visualizzazione di IPython, tutti gli oggetti hanno una rappresentazione testuale, quindi c'è più testo nel taccuino che visibile in primo luogo. – Jakob

+1

Se si è appena dopo le dichiarazioni di stampa, dare un'occhiata alle risposte a [questa domanda] (http://stackoverflow.com/q/11325019/2870069) – Jakob

risposta

6

Hai un errore di battitura, manca d in cap.stout. Dovrebbe essere cap.stdout Ho provato quanto segue e ha funzionato bene. cap.show() ha anche stampato "roba" e la ripetizione della cella ha sovrascritto il file.

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 
+0

corretto l'errore di battitura. Era solo nella domanda, non nel mio codice sorgente. La sovrascrittura va bene, il problema è che a volte duplica l'output se non si esegue "del cap". Oppure, se aggiungi cap.show(), lo stampa sul file due volte (anziché una volta su file e una volta sullo schermo) – pocketfullofcheese

+0

cioè, il problema non è sovrascrivere il file (l'apertura con 'w' cancellerà il file). Il problema è che la variabile cap non viene cancellata tra le esecuzioni. – pocketfullofcheese

+1

L'esecuzione di 'cap.show()' in una cella diversa non scriverà sul file. – Amit