python - 更多 < 子进程调用 Python 中的运算符

标签 python csv subprocess call cat

我有三个 csv 文件:1.csv2.csv3.csv,如下所示:

➜  ~  cat 1.csv 
1,1,1,1,1,1
➜  ~  cat 2.csv 
2,2,2,2,2,2
➜  ~  cat 3.csv 
3,3,3,3,3,3

如果我这样做:

➜  ~  cat < 1.csv < 2.csv < 3.csv > 4.csv

我得到:

➜  ~  cat 4.csv 
1,1,1,1,1,1
2,2,2,2,2,2
3,3,3,3,3,3

如我所愿。

现在我想在 Python subprocess.call 中执行此操作

import subprocess as sp

sp.call('cat < 1.csv < 2.csv < 3.csv > 4.csv', shell=True)

但结果是:

➜  ~  cat 4.csv 
3,3,3,3,3,3

在这些方式中它不会创建 4.csv 文件:

sp.call(['cat', '<', '1.csv', '<', '2.csv', '<', '3.csv', '>', '4.csv'], stdout=sp.PIPE,stderr=sp.PIPE

或者

mylist = ['cat', '<', '1.csv', '<', '2.csv', '<', '3.csv', '>', '4.csv']
sp.call(mylist, stdout=sp.PIPE,stderr=sp.PIPE)

最佳答案

这可以使用 python 轻松实现:

import fileinput
with open("4.csv", "a") as out:
    for f in fileinput.input(["1.csv","2.csv","3.csv"]):
        out.write(f)

使用子流程你可以重定向:

from subprocess import check_call
with open("4.csv", "a") as out:
     check_call(["cat", "1.csv", "2.csv", "3.csv"],stdout=out)

我建议使用第一个示例。

关于python - 更多 < 子进程调用 Python 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350763/

相关文章:

python - 如何在 pyodbc 中自动调用 fetchall() 而不进行异常处理?

c# - NPOI 支持 CSV/TSV?

javascript - 使用 d3 根据其他行向 csv 添加一列

python - Go 子进程通信

Python 许多依赖项中的任何一个

python - asyncio matplotlib show() 仍然卡住程序

python - 对 numpy 数组中每个元素的简单操作

windows - Windows批处理脚本以解析CSV文件并输出文本文件

pipe - 将命令通过管道传输到 Python 解释器中

python - shell 命令因 Python 中的 subprocess.call() 而失败