22
$\begingroup$

I'm currently working/prototyping into a Jupyter notebook. I want to run some of my code on a standalone iPython shell.

For now, I export my iPython code (file --> download as) and then execute it in my iPython (with %run). It works, but I would like to export only one cell or set of cells. So, that I can run only what I modified in my Jupyter notebook.

$\endgroup$
5
  • $\begingroup$ I am not sure whether it would make sense as in jupyter notebook, kernel maintains the state of previously run commands which might not be the case with ipython %run command. $\endgroup$
    – Rohan
    Aug 25, 2016 at 20:20
  • 3
    $\begingroup$ For a single cell you could simply copy and paste or use IPython magics: 1) %%writefile, see stackoverflow.com/questions/21034373/… or 2) %save, see stackoverflow.com/questions/947810/… command. $\endgroup$
    – Valentas
    Aug 26, 2016 at 7:08
  • 1
    $\begingroup$ @RohanSadale what I want is to work both in my jupyter notebook and in my ipython shell. my notebook is made to be shared and when I want to make the command previously run on my notebook but with a bigger dataset and test some stuff on it, I made it on my ipython shell. $\endgroup$
    – Manu H
    Aug 26, 2016 at 8:10
  • $\begingroup$ @Valentas your comment should be rewritten as an answer. $\endgroup$
    – Manu H
    Aug 26, 2016 at 8:11
  • $\begingroup$ See related question: stackoverflow.com/questions/27952428/… $\endgroup$
    – Pierz
    Apr 2, 2019 at 21:29

4 Answers 4

17
$\begingroup$

See this stack question

You can use %%capture Jupyter notebook' magic command to catch output of cell and then paste it to your text file with

with open('output.txt', 'w') as out:
   out.write(cap.stdout)

if you want to cell code to specific file for example code.txt you can use magic function %%writefile

%%writefile example.txt
ab = 'This is code'
a = 5
print(a+ 2)

Also if you want to append to file you must use -a parameter

$\endgroup$
4
  • 1
    $\begingroup$ I think you misunderstand the question. What I want to export is not the result of a cell but the code I wrote into that cell. $\endgroup$
    – Manu H
    May 10, 2018 at 8:13
  • 1
    $\begingroup$ ipython.readthedocs.io/en/stable/interactive/magics.html Then you can use %%writefile magic function $\endgroup$
    – user38487
    May 11, 2018 at 10:43
  • $\begingroup$ In that case, we cannot execute code. Could we execute the code and at the same time write the code into a file? $\endgroup$
    – Sung Kim
    Jun 28, 2020 at 3:02
  • $\begingroup$ It is super helpful for me :) $\endgroup$
    – Dwa
    Aug 24, 2021 at 21:13
4
$\begingroup$

You can register a new cell magic, for example:

from IPython.core.magic import register_cell_magic
@register_cell_magic
def run_and_save(line, cell):
    'Run and save python code block to a file'
    with open(line, 'wt') as fd:
        fd.write(cell)
    code = compile(cell, line, 'exec')
    exec(code, globals())

Now, you can use the run_and_save magic:

%%run_and_save hello.py

class Hello:
   def __init__(self):
      pass

$\endgroup$
1
$\begingroup$

I am not sure if it is possible to export only one cell in Jupyter notebooks.

But I do know that you could download as a python file and simply copy paste the particular cell you want in your new Jupyter notebook.

Let me know if you need any more help!

$\endgroup$
0
$\begingroup$

One way this can be done is to use Python's output caching system to access the output of a cell so it can be saved off to a file. The output from a numbered cell x is stored in a variable named _x, and output from the last command is in _ etc. e.g. Save the output of cell number 10 to a file cell_10.pickle using python's pickle format:

import pickle
with open('cell_10.pickle', 'wb') as f:
    pickle.dump(_10, f, pickle.HIGHEST_PROTOCOL)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.