从外壳到jupyter笔记本电脑的管道
问题描述:
有谁知道如何将shell命令的输出(csvkit工具调用链)流式传输到jupyter笔记本电脑,但是专门将其转换为Pandas DataFrame。从单元格的内容看起来是这样的:从外壳到jupyter笔记本电脑的管道
output = !find /path -name "*.csv" | csvstack ... | csvgrep ...
df = DataFrame.read_csv(output)
只有上面不是真的有效。 shell的输出是非常大的数百万行,Pandas可以很好地处理,但我不希望输出作为一个字符串被整体加载到内存中。
我正在寻找一种管道系统解决方案,它可以让Pandas读取输出。
答
IIUC你可以通过让大熊猫从标准输入读做:
Python脚本:
import sys
import pandas as pd
df = pd.read_csv(sys.stdin)
print(df)
Shell命令行:
!find /path -name "*.csv" | csvstack ... | csvgrep ... | python our_pyscript.py
请在最后一部分注意: | python our_pyscript.py
您可能还想检查k this
+0
jupyter笔记本作为服务器运行。这不起作用 –
答
也许“命名管道”在你的情况下会很有用。
在外壳:
mkfifo MYFIFO
head myfile.txt > MYFIFO
在笔记本:
with open('MYFIFO', 'rt') as f:
print(f.readline())
几个不错的互联网搜索应该给你你需要安全和有效使用命名管道的信息。祝你好运!
答
我想出了一个解决方法。虽然没有实际管道,但它节省了一些磁盘I/O开支:
import io
import pandas as pd
output = !(your Unix command)
df = pd.read_table(io.StringIO(output.n))
。@ Dmitry将csv读入剪贴板,然后pd。 read_clipboard?因为,知道大熊猫不处理流.. – Merlin