【发布时间】:2016-05-13 17:30:30
【问题描述】:
我想使用以下脚本从一个大的 fasta 文件中提取特定的 fasta 序列,但输出为空。
transcripts.txt 文件包含我要从assembly.fasta 导出到selected_transcripts.fasta 的列表转录ID(ID 和序列)。
例如:
- 成绩单.txt: 成绩单_00004|5601 Transcript_00005|5352
- assembly.fasta:
>成绩单_00004|5601 GATCTGGCGCTGAGCTGGGTGCTGATCGACCCGGCGTCCGGCCGCTCCGTGAACGCCTCGAGTCGGCGCCCGGTGTGCGTTGACCGGAGATCGCGATCTGGGGAGACCGTCGTGCGGTT >成绩单_00004|5360 CGATCTGGCGCTGAGCTGGGTGCTGATCGACCCGGCGTCCGGCCGCTCCGTGAACGCCTCGAGTCGGCGCCCGGTGTGCGTTGACCGGAGATCGCGATCTGGGGAGACCGTCGTGCGGTT
ID 前面有 > 符号:>Transcripts_00004|5601。
我必须读取assembly.fasta 文件,如果assembly.fasta 中的成绩单ID 与transcripts.txt 中写入的相同,我必须在selected_transcripts.fasta 中写入此成绩单ID 及其序列。所以,在上面的例子中,我只需要写第一个成绩单。
有什么建议吗? 谢谢。
from Bio import SeqIO
my_list = [line.split(',') for line in open("/home/universita/transcripts.txt")]
fin = open('/home/universita/assembly.fasta', 'r')
fout = open('/home/universita/selected_transcripts.fasta', 'w')
for record in SeqIO.parse(fin,'fasta'):
for item in my_list:
if item == record.id:
fout.write(">" + record.id + "\n")
fout.write(record.seq + "\n")
fin.close()
fout.close()
【问题讨论】:
-
您能否edit 提出您的问题并包括
transcripts.txt的一部分以及assembly.fasta的一部分,以便我们可以处理一些数据? -
您在每个冒号之后拆分您的成绩单行,但它是空格分隔的。这是故意的吗?
-
您的示例 FASTA 文件的标题行中没有 >。
-
对不起,在 trascripts.txt 中,每个 ID 都是文件的一行。所以示例中的第一个成绩单在第一个泳道,第二个成绩单在第二个泳道,依此类推。