我有一個非常簡單的問題。我有一個大文件需要經過三個步驟,一個解碼步驟使用外部程序,一些使用python進行處理,然後使用另一個外部程序進行重新編碼。我一直在使用subprocess.Popen()來嘗試在Python中執行此操作,而不是形成unix管道。但是,所有數據都會緩衝到內存中。有沒有pythonic方式做這個任務,或者我最好回到一個簡單的python腳本,從標準輸入讀取並寫入標準輸出與任何一方unix管道?非常大的輸入和管道使用subprocess.Popen
import os, sys, subprocess
def main(infile,reflist):
print infile,reflist
samtoolsin = subprocess.Popen(["samtools","view",infile],
stdout=subprocess.PIPE,bufsize=1)
samtoolsout = subprocess.Popen(["samtools","import",reflist,"-",
infile+".tmp"],stdin=subprocess.PIPE,bufsize=1)
for line in samtoolsin.stdout.read():
if(line.startswith("@")):
samtoolsout.stdin.write(line)
else:
linesplit = line.split("\t")
if(linesplit[10]=="*"):
linesplit[9]="*"
samtoolsout.stdin.write("\t".join(linesplit))
什麼是*大文件*? – eumiro 2010-10-21 19:23:21
好問題。大於可用RAM。 – seandavi 2010-10-21 19:30:46
我的部分愚蠢的錯誤。我在上面的for循環中使用了read()方法。當然,更正後的行應該沒有.read(),因爲samtools.stdout實際上是一個類文件對象。 – seandavi 2010-10-21 19:50:19