, sen yapabilirsiniz. Ama her zaman biraz ayrıştırma yapabilirsin.
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')
Düzenleme: Bir hücre bölünme boş bir satır, bir modül düzeyinde eğitim (işlev, değişken veya sınıf tanımı, ithalat, vs önce göründüğünde tetiklenir Önceki kodda ayrıştırılmasını
açıklanması .). Bu, girintisiz olan ve boş bir satırdan önce gelen bir çizgiyi gördüğüm zaman). Yani:
import time
import datetime
sadece bir hücre olabilir, ama Will:
import time
import datetime
iki hücreleri ve olacak da
class Test(objet):
def __init__(self, x):
self.x = x
def show(self):
print(self.x)
class Foo(object):
pass
sadece iki üst düzey tanımları olmadığından iki hücre olacak (boş olmayan satırlar) önce boş bir satır ile (dosyada ilk satırın önceliği boş bir satıra sahip olarak kabul edilir, çünkü yeni bir hücre başlatması gerekir).
Bu yararlıdır. Bir hücre bölünmesi tetiklendiğinde, cevabı kısa bir beyanda ekleyebilir misiniz? – user2304916
Basit bir açıklama ekledi. –
Bir python dosyasını bir dizüstü bilgisayara dönüştürmeyi değil, bir python betiği kullanarak bir dizi not defteri yazmayı düşünmüyorum. IPython.nbformat.current, neyin peşinde olduğum gibi görünüyor. Teşekkürler! – alex