0

我对编码很陌生,我正在试图弄清楚如何解决这个问题:找到所有以 # 开头的标题和第 7 列中包含“PASS”一词的行,并将它们打印到 new.vcf。Pass 可能会出现在其他列中,但在第 7 列中时,它将单独出现并且全部大写。这些文件是制表符分隔的。我已经完成了问题的第一部分,但不知道如何从第 7 列中提取“PASS”。这是我到目前为止的总代码。

#!/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()
4

3 回答 3

0

你有没有试过改变你的线路,

while data == "PASS":

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

它在字符串上使用 find() 方法?

于 2013-02-22T03:22:55.907 回答
0

用分隔符分割你的行并检查索引 6 是否为“PASS”

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

columns = line.split("   ")

print columns[6]
于 2013-02-22T03:25:42.817 回答
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()
于 2013-02-22T03:28:19.990 回答