2016-06-12 110 views
0

有誰知道如何將shell命令的輸出(csvkit工具調用鏈)流式傳輸到jupyter筆記本電腦,但是專門將其轉換爲Pandas DataFrame。從單元格的內容看起來是這樣的:從外殼到jupyter筆記本電腦的管道

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

只有上面不是真的有效。 shell的輸出是非常大的數百萬行,Pandas可以很好地處理,但我不希望輸出作爲一個字符串被整體加載到內存中。

我正在尋找一種管道系統解決方案,它可以讓Pandas讀取輸出。

+0

。@ Dmitry將csv讀入剪貼板,然後pd。 read_clipboard?因爲,知道大熊貓不處理流.. – Merlin

回答

0

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筆記本作爲服務器運行。這不起作用 –

0

也許「命名管道」在你的情況下會很有用。

在外殼:

mkfifo MYFIFO 
head myfile.txt > MYFIFO 

在筆記本:

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

幾個不錯的互聯網搜索應該給你你需要安全和有效使用命名管道的信息。祝你好運!

1

我想出了一個解決方法。雖然沒有實際管道,但它節省了一些磁盤I/O開支:

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