Python 函数在循环内不起作用
Python function doesnt work inside a loop
我正在尝试创建一个代码来比较基因文件和基因面板。
基因面板文件为 csv 格式,包含染色体、基因、起始位置和结束位置。
患者文件有染色体、突变和位置。
所以我做了一个循环,将基因面板信息传递给一个函数,在这个函数中,比较完成 return 我的相似项目列表。
当我用手动数据调用它时,该功能效果很好。但不要在循环内进行比较。
import vcf
import os, sys
records = open('exampleGenePanel.csv')
read = vcf.Reader(open('examplePatientFile.vcf','r'))
#functions to find mutations in patients sequence
def findMutations(gn,chromo,start,end):
start = int(start)
end = int(end)
for each in read:
CHROM = each.CHROM
if CHROM != chromo:
continue
POS = each.POS
if POS < start:
continue
if POS > end:
continue
REF = each.REF
ALT = each.ALT
print (gn,CHROM,POS,REF,ALT)
list.append([gn,CHROM,POS,REF,ALT])
return list
gene = records.readlines()
list=[]
y = len (gene)
x=1
while x < 3:
field = gene[x].split(',')
gname = field[0]
chromo = field[1]
gstart = field[2]
gend = field[3]
findMutations(gname,chromo,gstart,gend)
x = x+1
if not list:
print ('Mutation not found')
else:
print (len(list),' Mutations found')
print (list)
我想获取列表中匹配突变的详细信息。
当我手动将数据传递给函数时,这按预期工作。
Eg.findMutations('TESTGene','chr8','146171437','146229161')
但是在通过循环时不比较
问题是 findMutations
每次调用时都尝试从 read
读取,但在第一次调用后,read
已经被读取,没有任何剩余。我建议在调用函数之前阅读 read
的内容一次,然后将结果保存在列表中。然后findMutations
每次调用都能读取列表
最好为结果列表使用 list
以外的名称,因为该名称与 Python built-in 函数冲突。最好将 findMutations
return 作为其结果列表,而不是将其附加到全局列表中。
我正在尝试创建一个代码来比较基因文件和基因面板。 基因面板文件为 csv 格式,包含染色体、基因、起始位置和结束位置。 患者文件有染色体、突变和位置。 所以我做了一个循环,将基因面板信息传递给一个函数,在这个函数中,比较完成 return 我的相似项目列表。 当我用手动数据调用它时,该功能效果很好。但不要在循环内进行比较。
import vcf
import os, sys
records = open('exampleGenePanel.csv')
read = vcf.Reader(open('examplePatientFile.vcf','r'))
#functions to find mutations in patients sequence
def findMutations(gn,chromo,start,end):
start = int(start)
end = int(end)
for each in read:
CHROM = each.CHROM
if CHROM != chromo:
continue
POS = each.POS
if POS < start:
continue
if POS > end:
continue
REF = each.REF
ALT = each.ALT
print (gn,CHROM,POS,REF,ALT)
list.append([gn,CHROM,POS,REF,ALT])
return list
gene = records.readlines()
list=[]
y = len (gene)
x=1
while x < 3:
field = gene[x].split(',')
gname = field[0]
chromo = field[1]
gstart = field[2]
gend = field[3]
findMutations(gname,chromo,gstart,gend)
x = x+1
if not list:
print ('Mutation not found')
else:
print (len(list),' Mutations found')
print (list)
我想获取列表中匹配突变的详细信息。 当我手动将数据传递给函数时,这按预期工作。 Eg.findMutations('TESTGene','chr8','146171437','146229161') 但是在通过循环时不比较
问题是 findMutations
每次调用时都尝试从 read
读取,但在第一次调用后,read
已经被读取,没有任何剩余。我建议在调用函数之前阅读 read
的内容一次,然后将结果保存在列表中。然后findMutations
每次调用都能读取列表
最好为结果列表使用 list
以外的名称,因为该名称与 Python built-in 函数冲突。最好将 findMutations
return 作为其结果列表,而不是将其附加到全局列表中。