从shell到jupyter notebook cell

时间:2016-06-12 19:07:08

标签: python pandas jupyter-notebook csvkit

有没有人知道如何将shell命令(一系列csvkit工具调用)的输出流式传输到jupyter笔记本单元格中,特别是将其传输到Pandas DataFrame中。根据单元格的内容,它看起来像这样:

 output = !find /path -name "*.csv" | csvstack ... | csvgrep ... 
 df = DataFrame.read_csv(output)

只有上述内容并不真正有用。 shell的输出是非常大的数百万行,Pandas可以处理得很好,但我不希望输出作为字符串完整地加载到内存中。

我正在寻找一种管道/流媒体解决方案,允许Pandas在输出时读取输出。

3 个答案:

答案 0 :(得分:3)

我想出了一个解决方法。虽然实际上没有管道,但它节省了一些磁盘I / O费用:

import io
import pandas as pd
output = !(your Unix command)
df = pd.read_table(io.StringIO(output.n))

答案 1 :(得分:0)

IIUC你可以通过让熊猫从STDIN中读取来做到这一点:

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

您可能还想查看this

答案 2 :(得分:0)

也许“命名管道”对你的情况很有用。

在shell中:

mkfifo MYFIFO
head myfile.txt > MYFIFO

在笔记本中:

with open('MYFIFO', 'rt') as f:
    print(f.readline())

一些优秀的互联网搜索应该能够为您提供安全有效地使用命名管道所需的信息。祝你好运!