2015-03-10 25 views
9

Tôi đã chuyển đổi sổ ghi chép IPython sang định dạng HTML và sau đó mất tệp ipynb gốc.Máy tính xách tay IPython: Chuyển đổi sổ ghi chép HTML sang ipynb

Có cách nào đơn giản để tạo tệp sổ ghi chép gốc từ tệp HTML được chuyển đổi không?

+0

Sao chép mã từ tệp html vào sổ ghi chép mới không phải là tùy chọn cho bạn? Tôi đoán đây là một vấn đề khá bất thường và tôi nghi ngờ rằng có một cách dễ dàng để làm điều đó. – cel

+3

@cel, vâng, đó là một lựa chọn, không thực sự khủng khiếp cho máy tính xách tay lớn. Nhưng kể từ khi tập tin JSON ipynb và HTML chuyển đổi có nhiều hơn hoặc ít hơn cùng một thông tin, tôi đã tự hỏi nếu có thể có một công cụ chuyển đổi có sẵn. – foglerit

+0

Tôi không tin rằng có sẵn công cụ chuyển đổi có sẵn. –

Trả lời

1

Gần đây tôi đã sử dụng BeautifulSoup và JSON để chuyển đổi sổ ghi chép html thành ipynb. Bí quyết là xem xét lược đồ JSON của một sổ ghi chép và mô phỏng nó. Mã này chọn các tế bào chỉ nhập mã và các tế bào markdown

đây là mã của tôi

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)) 

đây là một phần của print(soup.div) đầu ra

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> 

Một ảnh chụp màn hình của kết quả file ipynb, nạp trên của tôi jupyter cục bộ và sau khi chạy tất cả các ô

enter image description here

+2

Tuyệt vời. Cám ơn vì đã chia sẻ. – foglerit

Các vấn đề liên quan