Chciałbym wygenerować kilka notebooków ze skryptu Pythona. Czy istnieje interfejs API do pisania notesów IPython?Czy istnieje api notebooka IPython?
5
A
Odpowiedz
4
Jest, można zrobić:
import io
from IPython.nbformat import current
def convert(py_file, ipynb_file):
with io.open(py_file, 'r', encoding='utf-8') as f:
notebook = current.reads(f.read(), format='py')
with io.open(ipynb_file, 'w', encoding='utf-8') as f:
current.write(notebook, f, format='ipynb')
convert('test.py', 'test.ipynb')
Ale to nie jest tak mądry i będzie umieścić cały kod z pliku Pythona w jednej komórce Notebook ipython. Ale zawsze możesz zrobić trochę parsowania.
import io
import re
from IPython.nbformat import current
def parse_into_cells(py_file):
with io.open(py_file, 'r', encoding='utf-8') as f:
data = f.readlines()
in_cell = True
cell = ''
for line in data:
if line.rstrip() == '':
# If a blank line occurs I'm out of the current cell
in_cell = False
elif re.match('^\s+', line):
# Indentation, so nope, I'm not out of the current cell
in_cell = True
cell += line
else:
# Code at the beginning of the line, so if I'm in a cell just
# append it, otherwise yield out the cell and start a new one
if in_cell:
cell += line
else:
yield cell.strip()
cell = line
in_cell = True
if cell != '':
yield cell.strip()
def convert(py_file, ipynb_file):
# Create an empty notebook
notebook = current.reads('', format='py')
# Add all the parsed cells
notebook['worksheets'][0]['cells'] = list(map(current.new_code_cell,
parse_into_cells(py_file)))
# Save the notebook
with io.open(ipynb_file, 'w', encoding='utf-8') as f:
current.write(notebook, f, format='ipynb')
convert('convert.py', 'convert.ipynb')
Edit: Wyjaśniając analizowania
w poprzednim kodzie podział komórek jest wyzwalany, gdy pusta linia pojawia się przed instrukcją poziomie modułu (funkcja, zmienna lub klasy definicji, import, etc .). Jest tak, gdy widzę linię, która nie jest wcięta i poprzedzona jest pustą linią). Więc:
import time
import datetime
będzie tylko jedna komórka, ale:
import time
import datetime
będą dwie komórki, a także
class Test(objet):
def __init__(self, x):
self.x = x
def show(self):
print(self.x)
class Foo(object):
pass
będą dwie komórki, ponieważ istnieją tylko dwie definicje top level (linie, które nie są wcięte) poprzedzone pustym wierszem (pierwszy wiersz w pliku jest uważany za poprzedzony pustą linią, ponieważ musi uruchomić nową komórkę).
Powiązane problemy
- 1. Ipython: Debugowanie kodu wewnątrz notebooka
- 2. Edytor zewnętrzny dla notebooka IPython
- 3. kliknij dwukrotnie, aby otworzyć notebooka ipython
- 4. Eksportowanie pojedynczej komórki w IPython/Jupyter notebooka
- 5. ustawienia szerokości działki w ipython notebooka
- 6. autoupdate moduł w ipython/jupyter notebooka
- 7. Wykonaj wydruk notebooka ipython w czasie rzeczywistym.
- 8. Link do kotwiczenia notebooka ipython do komórki bezpośrednio z zewnątrz.
- 9. Wyśrodkowywanie tekstu w komórkach oznaczania/pozycjonowania notebooka IPython?
- 10. Jak napisać wbudowany kod latexowy w IPython notebooka
- 11. IPython Notebook - Zachowaj drukowanie na wyjściu notebooka po zamknięciu przeglądarki
- 12. Jak uruchomić serwer notebooka ipython przy starcie jako demona
- 13. Czy istnieje REPL jak iPython dla Nodejs?
- 14. Cython w jupyter notebooka
- 15. Zmiana notebooka Jupyter 4.x + logo
- 16. ipython terminale notebooków niedostępne
- 17. Odczyt wartości wejściowych w ipythonie notebooka
- 18. Czy istnieje sposób wydrukowania prezentacji slajdów jowezer/ipython?
- 19. Odtwarzanie dźwięku w notatniku ipython
- 20. matplotlib.widget nie działa w pecython notebooka
- 21. Jak powiązać komórkę notatnika IPython w przecenę?
- 22. spiskowy wewnątrz pyta notebooka jupyter
- 23. IPython notebook z Optirunem
- 24. Używanie magii ipython w notebooku R jupyter?
- 25. Czy istnieje interfejs API zakładek Chrome?
- 26. Czy istnieje .NET API przy użyciu rsync?
- 27. Czy istnieje interfejs API dla stumbleupon?
- 28. Czy istnieje interfejs API Google Photos
- 29. Czy istnieje api programistów dla craigslist.org
- 30. Czy istnieje wyrafinowany interfejs API Java WorkQueue?
To jest przydatne. Czy możesz dodać w odpowiedzi krótką informację o uruchomieniu podziału komórki? – user2304916
Dodano proste wyjaśnienie. –
Nie zamierzam konwertować pliku Pythona do notebooka, ale raczej napisać serię notatników za pomocą skryptu Pythona. IPython.nbformat.current wygląda tak, jakbym był po. dzięki! – alex