Может кто-нибудь объяснить, почему локальные переменные, передаваемые в одну и ту же вложенную функцию, дают разные результаты.
Следующая функция import_alignment()
включает в себя условный блок if trimref:
, который изменяет входные данные и снова вызывает функциюэти новые данные.
Когда я писал эту функцию, она, казалось, делала ожидаемые манипуляции, но возвращала исходные данные.
Я только что понял, что пренебрегал назначением результатов, возвращаемых после второго вызова, связанным переменным.
первоначально import_alignment(modified *args)
сейчас ...
sequences, numseqs, refseq, refname = import_alignment(modified *args)
Что делает то, что должно, но я все еще не уверен, почему первая версия не работала.
... подробнее ...
Функция импортирует данные последовательности ДНК из файла Fasta (текстовый файл с> именем и последовательностью на альтернативных строках) и возвращает список последовательностей.вместе с количеством последовательностей, а также именем и последовательностью ссылки без пробелов (первая последовательность в файле).
Сначала вызывается функция numseqs (), которая выполняет базовую проверку качества на входеfile.
Затем он открывает файл, присваивает нечетные строки списку последовательностей (строки 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