2013-02-22 59 views
0

我在編碼方面很新穎,我試圖弄清楚如何解決這個問題: 找到所有以#開頭的標題和第7個字有「PASS」的行列並將它們打印到new.vcf。通行證可能出現在其他欄目中,但是在第7欄中它會單獨出現並且全部大寫。這些文件是製表符分隔的。 我已經完成了問題的第一部分,但無法弄清楚如何從第7欄中拉出「PASS」。這是我迄今爲止的總代碼。在python中讀寫

#!/usr/bin/env python 
myfile= open("temp.vcf","r") 
outfile= open("new.vcf","w")    
for data in myfile: 
    data = data.strip("\t") 
    if data[0] == "#": 
     outfile.write(data +"\n") 
myfile.close() 
outfile.close() 

myfile=open("temp.vcf","r") 
outfile=open("new.vcf","a") 

data=myfile.readline() 
while data == "PASS": 
    outfile.write(data+"/t") 
    data=myfile.readline() 

myfile.close() 
outfile.close() 
+0

爲了給你一些真實的幫助,一個樣本輸入和一個預期的輸出將非常有用。 – jonathanmarvens 2013-02-22 03:26:29

回答

0

你試圖改變你的線,

while data == "PASS": 

while data.find("PASS") >= 0 : 

它使用find()方法上的繩子?

0

由分隔符的拆分與支票指數6「PASS」

line = "# a b c d e PASS f" 

columns = line.split(" ") 

print columns[6] 
+0

爲什麼要投票?可能應該使用/ t但聽起來像功課,向正確的方向微調比做它更好。 – 2013-02-22 03:36:21

+0

哇,我真的很感激你的所有輸入。現在它工作得很好。另外,感謝關​​於str.split()的建議。 – user2097877 2013-02-22 03:38:14

0

首先,你並不需要打開和關閉兩次,你的文件。您應該同時執行這兩個操作。其次,要讀取特定列中的數據,您需要將每行分解爲這些列。 str.split是你的朋友。

#!/usr/bin/env python 
myfile= open("temp.vcf","r") 
outfile= open("new.vcf","w")    
for data in myfile: 
    if data[0] == "#": 
     outfile.write(data + "\n") 
     continue 
    columns = data.split("\t") 
    if columns[6] == "PASS": 
     outfile.write(data + "\n") 
myfile.close() 
outfile.close()