为了账号安全,请及时绑定邮箱和手机立即绑定

Jupyter / IPython SList ::从shell执行运算符“!”获取非标记化输出

Jupyter / IPython SList ::从shell执行运算符“!”获取非标记化输出

MYYA 2022-07-12 10:25:48
当 shell 命令在 a 中运行时Jupyter Notebook Python Cell,如下所示:output = ! some-shell-command发送到标准输出 ( stdout) 的每一行都被捕获在一个称为 a 的list 类似 IPython数据结构中SList。例如:output = !echo -e 'line1\nline2\nline3'print(output) # A IPython SList data-structure.['line1', 'line2', 'line3']但是,有时您希望保留原始字符串输出格式,而不将标记化为列表,如下所示:print(output)line1line2line3示例:对于结构化 JSON 输出——它是一个包含许多换行符的字符串——你不希望这种标记化发生。那么,我如何在Jupyter Notebooks使用!运算符时执行 shell 命令,并检索未标记的输出(如上)?理想情况下,解决方案将是Jupyter Notebooks.谢谢!
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

有SList许多属性,以各种形式返回它:


https://gist.github.com/parente/b6ee0efe141822dfa18b6feeda0a45e5


In [151]: ret = !ls *.json                                                                       

In [152]: ret                                                                                    

Out[152]: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

作为列表


In [153]: ret.l                                                                                  

Out[153]: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

作为换行符分隔的字符串:


In [154]: ret.n                                                                                  

Out[154]: 'foo1.json\nfoo.json\nlogins.json\nstack56532806.json'

以空格分隔:


In [155]: ret.s                                                                                  

Out[155]: 'foo1.json foo.json logins.json stack56532806.json'

In [156]: type(ret)                                                             

它的文档


In [158]: ret?                                                                                   

Type:        SList

String form: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

Length:      4

File:        /usr/local/lib/python3.6/dist-packages/IPython/utils/text.py

Docstring:  

List derivative with a special access attributes.


These are normal lists, but with the special attributes:


* .l (or .list) : value as list (the list itself).

* .n (or .nlstr): value as a string, joined on newlines.

* .s (or .spstr): value as a string, joined on spaces.

* .p (or .paths): list of path objects (requires path.py package)


Any values which require transformations are computed only once and

cached.有SList许多属性,以各种形式返回它:


https://gist.github.com/parente/b6ee0efe141822dfa18b6feeda0a45e5


In [151]: ret = !ls *.json                                                                       

In [152]: ret                                                                                    

Out[152]: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

作为列表


In [153]: ret.l                                                                                  

Out[153]: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

作为换行符分隔的字符串:


In [154]: ret.n                                                                                  

Out[154]: 'foo1.json\nfoo.json\nlogins.json\nstack56532806.json'

以空格分隔:


In [155]: ret.s                                                                                  

Out[155]: 'foo1.json foo.json logins.json stack56532806.json'

In [156]: type(ret)                                                             

它的文档


In [158]: ret?                                                                                   

Type:        SList

String form: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']

Length:      4

File:        /usr/local/lib/python3.6/dist-packages/IPython/utils/text.py

Docstring:  

List derivative with a special access attributes.


These are normal lists, but with the special attributes:


* .l (or .list) : value as list (the list itself).

* .n (or .nlstr): value as a string, joined on newlines.

* .s (or .spstr): value as a string, joined on spaces.

* .p (or .paths): list of path objects (requires path.py package)


Any values which require transformations are computed only once and

cached.


查看完整回答
反对 回复 2022-07-12
?
精慕HU

TA贡献1845条经验 获得超8个赞

对于那些希望将类型为jupyter 标准输出 ( stdout) 的人来说,这就是我所做的:SListJSON


import json

output = !command  #output is an SList

j_out = json.dumps(output)  #jout is a str

out_dict = json.loads(j_out) #out_dict is a list 

out_dict[i][j]... #to access list elements

这假设command已将适当格式化的输出处理成 python 字典。


查看完整回答
反对 回复 2022-07-12
?
哔哔one

TA贡献1854条经验 获得超8个赞

用于join()将迭代器组合成字符串。

"\n".join(output)


查看完整回答
反对 回复 2022-07-12
  • 3 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信