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

2024-06-16 13:45:23 发布

您现在位置:Python中文网/ 问答频道 /正文

        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的文件时,输出是:

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

(对txt中的所有行继续)

但如果找不到,我只想

    No Key Found

Tags: keynoininforawdeflineposition
1条回答
网友
1楼 · 发布于 2024-06-16 13:45:23

我们需要一个数据和功能的清晰描述。我认为你的问题是对迭代的滥用,但我不能确定。你知道吗

看起来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")

请注意一点:这里的else位于for循环上,而不是if上。你的逻辑问题是,如果这个ID在某个地方的记录里,你一找到它就知道了。如果不是,你不知道,直到你退出循环。你试着一次完成这一切,这就是为什么你得到“找不到钥匙”反复打印。你知道吗

这能让你动起来吗?你知道吗

相关问题 更多 >