读取所有行的重复打印输出

时间:2015-09-22 17:30:12

标签: python python-3.x repeat

        import sys

    def main():
        global dna
        dna = {}
        chromo = []
        position = []

        parseFile(sys.argv[1], dna, chromo, position)       

    def parseFile(raw_file, dna, chromo, position): 
        raw_filename    = raw_file
        raw_file        = open(raw_filename, 'r')
        raw_lines       = raw_file.readlines()
        raw_file.close()

        for line in raw_lines:  
            dna_info = line.split('\t') # splitting by tab
            dna_info[-1] = dna_info[-1][:-1] # getting rid of new line

            rsid = dna_info[0]
            genotype = dna_info[3]
            dna[rsid] = dna_info[3] 

            checkType2Diabetes(dna_info, rsid, genotype)    

    **def checkType2Diabetes(dna_info, rsid, genotype):

        for item in rsid: 
            if "rs7754840" in rsid:
                print ("Key Found")
                break 
            else:
                print("No Key Found")**

包含整个代码,def checkType2Diabetes(等等)中的问题 我希望代码只打印一次,但对于它检查的每个密钥,如果找不到密钥则打印。其中,当我运行一个充满rsid #s的文件时,输出为:

    No Key Found
    No Key Found
    No Key Found
    No Key Found 

(继续txt中的所有行)

但如果找不到,我想要的只是

    No Key Found

1 个答案:

答案 0 :(得分:0)

我们需要清楚地描述数据和功能。我认为你的问题是滥用for迭代,但我无法确定。

看起来rsid是每条记录的一个字段,包含一个ID字符串。但是,你的最后一个for循环假定它是要分开的东西。例如,如果rsid的输入行的值为“rs7754840”,则for循环遍历各个字符:'r','s','7','7'等。

在这种情况下,循环底部需要的是这样的模式:

        rsid = dna_info[0]
        genotype = dna_info[3]
        dna[rsid] = dna_info[3] 

        if "rs7754840" in rsid:
            print ("Key Found")
            break

    else:
        print("No Key Found")

请注意一点:其他位于 for 循环,而不是 if 。你遇到的逻辑问题是,如果ID在某个地方的记录中,你就会在找到它时立即知道。如果不是,你就不知道,直到你退出循环。你试图一次性完成所有这一切,这就是为什么你反复打印“找不到钥匙”的原因。

这会让你感动吗?