有人可以解释为什么传递给同一嵌套函数的局部变量会产生不同的结果。
以下功能import_alignment()
包括一个条件块if trimref:
,该条件块更改输入数据并对该新数据再次调用该函数。
当我编写此函数时,它似乎进行了预期的操作,但返回了原始数据。
我刚刚意识到我忽略了将第二次调用返回的结果分配给相关联的变量。
最初import_alignment(modified *args)
...
sequences, numseqs, refseq, refname = import_alignment(modified *args)
该做什么,但是我仍然不确定为什么第一个版本不起作用。
...更多详细信息...
该函数从Fasta文件(文本文件中的名称和序列在交替的行上)中导入DNA序列数据,并返回序列列表,以及序列计数,无间隙引用的名称和序列(文件中的第一个序列)。
它首先调用numseqs()函数,该函数对输入文件进行基本质量检查。
然后打开文件,将奇数行分配给序列列表(行0、2、4,...是序列名称; 1、3、5是序列),提取参考名称并消除空格(' -')从参考序列开始。
然后测试是否trimref == True
,然后从文件中获取序列名称,
`trim_TOref()从所有序列中删除参考空位
output_data()
将结果序列比对写入新的fasta文件(name_trimmed.fas)
此文件然后传递回import_alignment()
,以提取修改后的序列
def import_alignment(filename, path, trimref=True):
"""
this function extracts sequences from a fasta file and does basic QC
"""
infile = path + filename
filesize = file_size(infile)
print("Input path and filename : ",infile)
print("File Size : {0}".format(filesize))
numseqs = check_even(infile)
try:
with open(infile) as f:
f.seek(0)
sequences = pick_lines(f, odds=True)
refseq = sequences[0].replace("-","")
f.seek(0)
refname = f.readline().strip('>\n')
if trimref:
f.seek(0)
seqnames = pick_lines(f, False)
sequences = trim_TOref(sequences)
outfile = filename[0:-4] + "_trimmed"
output_data(outfile, sequences, outpath = (path + 'output/'), filetype = '.fas', keys = seqnames)
trimref = False
sequences, numseqs, refseq, refname = import_alignment((outfile + '.fas'), outpath, trimref)
except FileNotFoundError:
print("File not found. Check the path variable and filename")
exit()
return sequences, numseqs, refseq, refname