2015-03-10 46 views
9

Ho convertito un blocco appunti IPython in formato HTML e successivamente ho perso il file ipynb originale.Notebook IPython: convertire un blocco note HTML in ipynb

C'è un modo semplice per generare il file del notebook originale dal file HTML convertito?

+0

La copia del codice dal file html in un nuovo notebook non è un'opzione per te? Immagino che questo sia un problema piuttosto insolito e dubito che ci sia un modo semplice per farlo. – cel

+3

@cel, sì, questa è un'opzione, semplicemente non particolarmente utile per i grandi notebook. Ma dal momento che il file JSON ipynb e l'HTML convertito hanno più o meno le stesse informazioni, mi chiedevo se potesse esserci un convertitore disponibile. – foglerit

+0

Non credo che sia disponibile un convertitore pre-inscatolato. –

risposta

1

Recentemente ho usato BeautifulSoup e JSON per convertire il taccuino html in ipynb. il trucco è guardare lo schema JSON di un notebook ed emularlo. Il codice seleziona le celle solo il codice di ingresso e le cellule di riduzione dei prezzi

Ecco il mio codice

from bs4 import BeautifulSoup 
import json 
import urllib.request 
url = 'http://nbviewer.jupyter.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb' 
response = urllib.request.urlopen(url) 
# for local html file 
# response = open("/Users/note/jupyter/notebook.html") 
text = response.read() 

soup = BeautifulSoup(text, 'lxml') 
# see some of the html 
print(soup.div) 
dictionary = {'nbformat': 4, 'nbformat_minor': 1, 'cells': [], 'metadata': {}} 
for d in soup.findAll("div"): 
    if 'class' in d.attrs.keys(): 
     for clas in d.attrs["class"]: 
      if clas in ["text_cell_render", "input_area"]: 
       # code cell 
       if clas == "input_area": 
        cell = {} 
        cell['metadata'] = {} 
        cell['outputs'] = [] 
        cell['source'] = [d.get_text()] 
        cell['execution_count'] = None 
        cell['cell_type'] = 'code' 
        dictionary['cells'].append(cell) 

       else: 
        cell = {} 
        cell['metadata'] = {} 

        cell['source'] = [d.decode_contents()] 
        cell['cell_type'] = 'markdown' 
        dictionary['cells'].append(cell) 
open('notebook.ipynb', 'w').write(json.dumps(dictionary)) 

qui fa parte della print(soup.div) uscita

div class="container"> 
<div class="navbar-header"> 
<button class="navbar-toggle collapsed" data-target=".navbar-collapse" data-toggle="collapse" type="button"> 
<span class="sr-only">Toggle navigation</span> 
<i class="fa fa-bars"></i> 
</button> 
<a class="navbar-brand" href="/"> 
<img src="/static/img/nav_logo.svg?v=479cefe8d932fb14a67b93911b97d70f" width="159"/> 
</a> 
</div> 
<div class="collapse navbar-collapse"> 
<ul class="nav navbar-nav navbar-right"> 
<li> 
<a class="active" href="http://jupyter.org">JUPYTER</a> 
</li> 
<li> 
<a href="/faq" title="FAQ"> 
<span>FAQ</span> 

Una schermata del file ipynb risultante, caricato sul mio jupyter locale e dopo aver eseguito tutte le celle

enter image description here

+2

È grandioso. Grazie per la condivisione. – foglerit