我一直在尝试使用命令行排序对一些非常大的CSV进行排序,以便它们可以在Python中进行处理。我正在尝试使用子进程在Python中执行此操作,但无法使其工作。这是代码:
import subprocess
fn = 'path/to/filename'
p1 = subprocess.Popen(shlex.split('tail -n +2 {}'.format(fn)), stdout=subprocess.PIPE)
p2 = subprocess.Popen(shlex.split("sort -t$'\t' -k2,2n -k3,3"), stdin=p1.stdout, stdout=subprocess.PIPE)
output = p2.communicate()[0]
print(output)
我打印时
p1.communicate()[0]
我按预期获得文件的字节流,但是当我打印
时p2.communicate()[0]
我得到一个空的字节流,我无法弄清楚为什么。
作为旁注,如果有一种更好的方法可以将CSV分类太大而不适合记忆,那么我很乐意听到它。
答案 0 :(得分:1)
您的sort命令的-t
标志中有一个无关的美元符号,删除它并且它应该有效:
p2 = subprocess.Popen(shlex.split("sort -t'\t' -k2,2n -k3,3"), stdin=p1.stdout, stdout=subprocess.PIPE)