在python中读写

时间:2013-02-22 03:15:41

标签: python

我在编码方面很陌生,我正试图弄清楚如何解决这个问题: 找到所有以#开头的标题和第7列中包含“PASS”字样的行,并将它们打印到new.vcf。通行证可能会显示在其他列中,但在第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()

3 个答案:

答案 0 :(得分:0)

您是否尝试过改变行,

while data == "PASS":

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

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

答案 1 :(得分:0)

按分隔符拆分行,并检查索引6是否为“PASS”

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

columns = line.split("   ")

print columns[6]

答案 2 :(得分: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()