python - Jupyter notebook %run 参数未评估
问题描述
我正在尝试从 Jupyter 笔记本中运行 python 程序并将其传递给这样的变量:
docs = ['file1', 'file2']
for doc in docs:
%run 'prog.py' doc
问题是“doc”没有被评估并且是按字面意思理解的,在我的情况下,这会导致:[Errno 2] No such file or directory: 'doc'
将 -i 添加到 %run 不会改变结果。
我究竟做错了什么?
解决方案
Jupyter Notebook 使用 $name、bash 样式扩展变量。
在变量名前加一个 '$' 有效:
docs = ['file1', 'file2', 'file 3', 'file\ 3']
for doc in docs:
%run 'prog.py' $doc # <- $doc instead of doc
请注意,您必须将文件名中的空格替换为“\”,以便 prog.py 能够打开文件。在上面的示例中,'file 3' 应该会出现错误,但 'file\ 3' 应该没问题。
从ipython 文档: 所有以 '$' 为前缀的表达式都得到扩展。有关语义规则的详细信息,请参阅 PEP-215: http: //www.python.org/peps/pep-0215.html。这是 IPython 用于变量扩展的库。如果你想访问一个真正的 shell 变量,一个额外的 $ 是必要的,以防止它被 IPython 扩展
推荐阅读
- python - 在需要 python 帮助的情况下遍历 json 对象
- c - 有没有办法在函数中使用 typedef 结构变量...?
- c++ - 共享指针存储在一个智能指针向量内,另一个对象存储在共享指针中(Shareption)
- path - 如何更改 Julia 日志路径?
- forms - Xamarin Forms 如何将逗号添加到将使用数据(整数)不断更新的输入字段
- java - 'On Action' 是否指默认操作?
- sitecore - Sitecore 添加链接作为渲染变体的部分
- rust - 在 Rust 中使用以前借用的 Result
- sql - 信息是否通过 CREATE TABLE 更新本身传递到新表?
- java - 无法从谷歌 url 下拉 chromedriver 驱动程序