簡體   English   中英

從外殼到jupyter筆記本電池的管道

[英]piping from shell into jupyter notebook cell

有誰知道如何將shell命令(一連串的csvkit工具調用)的輸出流傳輸到jupyter筆記本單元中,特別是流到Pandas DataFrame中。 從單元格的內容看起來像這樣:

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

僅上述內容是行不通的。 Shell的輸出非常大,有數百萬行,Pandas可以很好地處理它,但是我不希望將輸出整體作為字符串加載到內存中。

我正在尋找一種管道/流媒體解決方案,該解決方案允許Pandas讀取輸出信息。

我想出了一種解決方法。 雖然實際上不是管道,但它節省了一些磁盤I / O費用:

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

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 | python our_pyscript.py

您可能還需要檢查一下

在您的情況下,“命名管道”可能會很有用。

在外殼中:

mkfifo MYFIFO
head myfile.txt > MYFIFO

在筆記本中:

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

一些良好的互聯網搜索應會為您提供安全有效地使用命名管道所需的信息。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM