猿问

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

当 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)


line1

line2

line3

示例:对于结构化 JSON 输出——它是一个包含许多换行符的字符串——你不希望这种标记化发生。


那么,我如何在Jupyter Notebooks使用!运算符时执行 shell 命令,并检索未标记的输出(如上)?


理想情况下,解决方案将是Jupyter Notebooks.


谢谢!


MYYA
浏览 146回答 3
3回答

吃鸡游戏

有SList许多属性,以各种形式返回它:https://gist.github.com/parente/b6ee0efe141822dfa18b6feeda0a45e5In [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:        SListString form: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']Length:      4File:        /usr/local/lib/python3.6/dist-packages/IPython/utils/text.pyDocstring:  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 andcached.有SList许多属性,以各种形式返回它:https://gist.github.com/parente/b6ee0efe141822dfa18b6feeda0a45e5In [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:        SListString form: ['foo1.json', 'foo.json', 'logins.json', 'stack56532806.json']Length:      4File:        /usr/local/lib/python3.6/dist-packages/IPython/utils/text.pyDocstring:  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 andcached.

精慕HU

对于那些希望将类型为jupyter 标准输出 ( stdout) 的人来说,这就是我所做的:SListJSONimport jsonoutput = !command  #output is an SListj_out = json.dumps(output)  #jout is a strout_dict = json.loads(j_out) #out_dict is a list out_dict[i][j]... #to access list elements这假设command已将适当格式化的输出处理成 python 字典。

哔哔one

用于join()将迭代器组合成字符串。"\n".join(output)
随时随地看视频慕课网APP

相关分类

Python
我要回答