【发布时间】:2020-07-26 22:29:24
【问题描述】:
我正在尝试找到一个 python 解决方案,以使用序列的完整标题作为查询来提取 fasta 文件中特定序列的长度。完整的标头存储为管道中较早的变量(即“CONTIG”)。我想将此脚本的输出保存为变量,以便稍后在同一管道中使用。
以下是使用 Lucía Balestrazzi 提供的代码的脚本的更新版本。
附加信息:以下 with 语句嵌套在一个较大的 for 循环中,该循环遍历原始基因组的子样本。我目录中的第一个子样本 fasta 有一个长度为 40129801 的单个序列“>chr1:0-40129801”。我正在尝试写出一个文本文件“OUTPUT”,其中包含有关每个子样本 fasta 的一些基本信息。此文本文件将用作下游另一个程序的输入。
原始 fasta 文件中的标题名称是 chr1、chr2 等...而子示例 fastas 中的标题名称类似于:
batch1.fa >chr1:0-40k
batch2.fa >chr1:40k-80k
...等等...
import Bio.SeqIO as IO
record_dict = IO.to_dict(IO.parse(ORIGINAL_GENOME, "fasta")) #not the subsample
with open(GENOME_SUBSAMPLE, 'r') as FIN:
for LINE in FIN:
if LINE.startswith('>'):
#Example of "LINE"... >chr1:0-40129801
HEADER = re.sub('>','',LINE)
#HEADER = chr1:0-40129801
HEADER2 = re.sub('\n','',HEADER)
#HEADER2 = chr1:0-40129801 (no return character on the end)
CONTIG = HEADER2.split(":")[0]
#CONTIG = chr1
PART2_HEADER = HEADER2.split(":")[1]
#PART2_HEADER = 0-40129801
START = int(PART2_HEADER.split("-")[0])
#START = 0
END = int(PART2_HEADER.split("-")[1])
#END = 40129801
LENGTH = END-START
#LENGTH = 40129801 minus 0 = 40129801
#This is where I'm stuck...
ORIGINAL_CONTIG_LENGTH = len(record_dict[CONTIG]) #This returns "KeyError: 1"
#ORIGINAL_CONTIG_LENGTH = 223705999 (this is from the full genome, not the subsample).
OUTPUT.write(str(START) + '\t' + str(HEADER2) + '\t' + str(LENGTH) + '\t' + str(CONTIG) + '\t' + str(ORIGINAL_CONTIG_LENGTH) + '\n')
#OUTPUT = 0 chr1:0-40129801 40129801 chr1 223705999
OUTPUT.close()
我对生物信息学比较陌生。我知道我搞砸了我如何使用字典,但我不太确定如何解决它。
任何建议将不胜感激。谢谢!
【问题讨论】:
标签: python bioinformatics biopython fasta