运行 来自 python 文件的 ipynb 保持导入和变量
Run ipynb from python file keeping imports and variables
我正在尝试在 ipynb 文件中创建一个项目,该文件由 python 脚本访问和执行,以便于创建基于终端的界面。 ipynb 已经很完整了,但是当试图从脚本中执行两个代码单元时,问题就出现了。
我正在使用此代码从 ipynb 文件中提取代码单元:
# Initializing AI iPython Notebook cells and definitions
rawFile = open('Keras Implementation new.ipynb').read()
cells = json.loads(rawFile)
cells = cells["cells"]
codeCells = []
for i in cells:
if i["cell_type"] == "code":
codeCells.append(i["source"])
cellDefinitionsRaw = open('Cell Definitions.json').read()
cellDefinitions = json.loads(cellDefinitionsRaw)
我正在使用此代码来测试连续执行两个单元格:
def executeCell(cell):
for i in cell:
exec(i)
executeCell(codeCells[0])
executeCell(codeCells[1])
这两个代码单元作为测试执行:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from sklearn.metrics import mean_squared_error
dataset = pd.DataFrame(pd.read_csv('AAAU.csv'))
dataset.head()
我收到错误消息,指出未定义 pd。除了将它们包含在基本脚本中之外,有没有办法从 exec 语句中继承导入?因为我认为这个问题也可能会转移到变量上
编辑(答案):
我重新检查了文档,发现可以修改 exec 调用以使用全局变量:
exec(codeCells[i], globals())
并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:
codeCells = []
for i in cells:
if i["cell_type"] == "code":
code = ""
for j in i["source"]:
code += j
codeCells.append(code)
而不是这个:
def executeCell(cell):
for i in cell:
exec(i)
executeCell(codeCells[0])
executeCell(codeCells[1])
试试这个:
exec(codeCells[0])
exec(codeCells[1])
我 re-checked 查看文档,发现可以修改 exec 调用以使用全局变量:
exec(codeCells[i], globals())
并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:
codeCells = []
for i in cells:
if i["cell_type"] == "code":
code = ""
for j in i["source"]:
code += j
codeCells.append(code)
我正在尝试在 ipynb 文件中创建一个项目,该文件由 python 脚本访问和执行,以便于创建基于终端的界面。 ipynb 已经很完整了,但是当试图从脚本中执行两个代码单元时,问题就出现了。
我正在使用此代码从 ipynb 文件中提取代码单元:
# Initializing AI iPython Notebook cells and definitions
rawFile = open('Keras Implementation new.ipynb').read()
cells = json.loads(rawFile)
cells = cells["cells"]
codeCells = []
for i in cells:
if i["cell_type"] == "code":
codeCells.append(i["source"])
cellDefinitionsRaw = open('Cell Definitions.json').read()
cellDefinitions = json.loads(cellDefinitionsRaw)
我正在使用此代码来测试连续执行两个单元格:
def executeCell(cell):
for i in cell:
exec(i)
executeCell(codeCells[0])
executeCell(codeCells[1])
这两个代码单元作为测试执行:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from sklearn.metrics import mean_squared_error
dataset = pd.DataFrame(pd.read_csv('AAAU.csv'))
dataset.head()
我收到错误消息,指出未定义 pd。除了将它们包含在基本脚本中之外,有没有办法从 exec 语句中继承导入?因为我认为这个问题也可能会转移到变量上
编辑(答案):
我重新检查了文档,发现可以修改 exec 调用以使用全局变量:
exec(codeCells[i], globals())
并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:
codeCells = []
for i in cells:
if i["cell_type"] == "code":
code = ""
for j in i["source"]:
code += j
codeCells.append(code)
而不是这个:
def executeCell(cell):
for i in cell:
exec(i)
executeCell(codeCells[0])
executeCell(codeCells[1])
试试这个:
exec(codeCells[0])
exec(codeCells[1])
我 re-checked 查看文档,发现可以修改 exec 调用以使用全局变量:
exec(codeCells[i], globals())
并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:
codeCells = []
for i in cells:
if i["cell_type"] == "code":
code = ""
for j in i["source"]:
code += j
codeCells.append(code)