我有三个 csv 文件:1.csv、2.csv、3.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/