【发布时间】:2017-02-13 07:52:38
【问题描述】:
我无法理解如何使用subprocess 解决我的问题。
假设我的子目录中有一个制表符分隔的文本文件tabdelimited1.txt,我想将其读入熊猫数据框。
当然,您可以按如下方式简单地导入数据:
import pandas as pd
df = pd.read_csv("tabdelimited1.txt", header=None, sep="\s+")
但是,假设我们想使用subprocess。在命令行中,$cat tabdelimited1.txt 将输出所有行。
现在,我想使用子进程来读取cat tabdelimited1.txt 的输出。如何做到这一点?
我们可以使用
import subprocess
task = subprocess.Popen("cat file.txt", shell=True, stdout=subprocess.PIPE)
data = task.stdout.read()
但是 (1) 我收到 shell=True 的错误和 (2) 我想逐行读取数据。
如何使用subprocess 逐行读取tabdelimited1.txt?脚本应如下所示:
import subprocess
import pandas as pd
df = pd.DataFrame()
task = subprocess.Popen("cat file.txt", shell=True, stdout=subprocess.PIPE)
# while lines exist:
# line = subprocess std
df=pd.concat([df, line])
已编辑
【问题讨论】:
-
shell=True出现什么错误? -
子进程模块与从管道输入中读取无关,您只需要read from sys.stdin for
cat x.txt | python script1.py。 -
@TessellatingHeckler 但 OP 想使用
subprocess。 -
@tdelaney OP 想要使用 subprocess 从管道输入中读取,这没有意义。一种可能的前进方式是“如何使用 subprocess 调用 cat 来读取文件”,但另一种前进方式是“为什么你不需要使用 subprocess 来做你想做的事情在问题的最后描述您认为子流程将启用(但不会)“.
-
最后
cat...| ...script1.py行的目的是什么?script1.py is already doing acat file.txt. It's not reading fromstdin`(这是外部cat将其输出传送到的位置。
标签: python python-3.x csv subprocess cat