Python:使用Bed文件从FASTA文件中提取DNA序列

时间:2015-05-28 10:12:23

标签: python bioinformatics biopython fasta dna-sequence

我可以知道如何从fasta文件中提取dna序列?我尝试过bedtools和samtools。 Bedtools getfasta做得很好但是对于我的一些文件返回“警告:在fasta文件中找不到染色体”,但事实是床文件中的染色体名称和fasta完全相同。我正在寻找python可以为我做这个任务的其他选择。

床文件:
chr1:117223140-117223856 3 7
chr1:117223140-117223856 5 9

Fasta文件:
> chr1:117223140-117223856
CGCGTGGGCTAGGGGCTAGCCCC

所需的输出:
&gt ; CHR1:117223140-117223856
CGTGG
> CHR1:117223140-117223856
TGGGC

3 个答案:

答案 0 :(得分:3)

domain.com Customer1.domain.com Customer2.domain.com ... CustomerN.domain.com 是你想要使用的:

BioPython

答案 1 :(得分:1)

尝试,用:

from Bio import SeqIO

#I use RAM, and to store fasta in dictionary
parser = SeqIO.parse(open("input.fasta")
dict_fasta = dict([(seq.id, seq) for seq in parser, "fasta")])

output = open("output.fasta", "w")
for line in open("input.bed"):
  id, begin, end = line.split()
  if id in dict_fasta:
    #[int(begin)-1:int(end)] if the first base in a chromosome is numbered 1
    #[int(begin):int(end)+1] if the first base in a chromosome is numbered 0
    output.write(dict_fasta[id][int(begin)-1:int(end)].format("fasta"))
  else:
    print id + " don't found"

output.close()

你知道,染色体的第一个碱基编号为1:

>chr1:117223140-117223856
CGTGG
>chr1:117223140-117223856
TGGGC

你得到,染色体的第一个碱基编号为0:

>chr1:117223140-117223856
GTGGG
>chr1:117223140-117223856
GGGCT

答案 2 :(得分:1)

您的床文件需要以制表符分隔才能使用它。用制表符替换冒号,破折号和空格。

BedTools doc页面说" bedtools要求所有BED输入文件(以及从stdin接收的输入)以制表符分隔。" BedTools