在python中将fasta对齐文件拆分为所有可能的对齐对
我有一个文件:在python中将fasta对齐文件拆分为所有可能的对齐对,python,sequence,biopython,fasta,Python,Sequence,Biopython,Fasta,我有一个文件: >SEQ1 AGGGGGCGGATAGGCAG-C--AGGCGCGGAGAGCGGCAGCG---GG---GGACG-AC- AGGAACACCTATACTTcCTTCTAC-CAGACGAAC-------CGAGACa >SEQ2 TGGGGGCGGATGGGCAG----AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC- AGGAACATCTAHACCCcCTTCTAC-CAGACGAAC-------CGACACa >SEQ3
>SEQ1
AGGGGGCGGATAGGCAG-C--AGGCGCGGAGAGCGGCAGCG---GG---GGACG-AC-
AGGAACACCTATACTTcCTTCTAC-CAGACGAAC-------CGAGACa
>SEQ2
TGGGGGCGGATGGGCAG----AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTAHACCCcCTTCTAC-CAGACGAAC-------CGACACa
>SEQ3
TGGGGGCGGATGGGCAG-T--AGGCGCGGATAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTATACCCcCTTCTAC-CAGACGAAC-------CGACACa
>SEQ4
TGGGGGCGGATGGGCAG-A--AGGCGCGGTGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTACACCCcCTTCTAC-CAGACGAAC-------CGACACa
>SEQ5
TGGGGGCGGATGGGCAG-G--AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTATACCCcCTTCTAC-CAGACGAAC-------CGACACa
我想打开这个文件,在SEQn之间创建所有可能的对
(一对中没有相同的序列)
例如,如果有5个SEQ,那么将有n(n-1)/2
5(5-1)/2=10组
所以
我想创建10个新的fasta对齐文件:
SEQ1与SEQ2.fa
>SEQ1
AGGGGGCGGATAGGCAG-C--AGGCGCGGAGAGCGGCAGCG---GG---GGACG-AC-
AGGAACACCTATACTTcCTTCTAC-CAGACGAAC-------CGAGACa
>SEQ2
TGGGGGCGGATGGGCAG----AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTAHACCCcCTTCTAC-CAGACGAAC-------CGACACa
.
.
.
>SEQ4
TGGGGGCGGATGGGCAG-A--AGGCGCGGTGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTACACCCcCTTCTAC-CAGACGAAC-------CGACACa
>SEQ5
TGGGGGCGGATGGGCAG-G--AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTATACCCcCTTCTAC-CAGACGAAC-------CGACACa
SEQ4与SEQ5.fa
>SEQ1
AGGGGGCGGATAGGCAG-C--AGGCGCGGAGAGCGGCAGCG---GG---GGACG-AC-
AGGAACACCTATACTTcCTTCTAC-CAGACGAAC-------CGAGACa
>SEQ2
TGGGGGCGGATGGGCAG----AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTAHACCCcCTTCTAC-CAGACGAAC-------CGACACa
.
.
.
>SEQ4
TGGGGGCGGATGGGCAG-A--AGGCGCGGTGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTACACCCcCTTCTAC-CAGACGAAC-------CGACACa
>SEQ5
TGGGGGCGGATGGGCAG-G--AGGCGCGGAGAGCGGCAGCG-A-GG---GGACG-AC-
AGGAACATCTATACCCcCTTCTAC-CAGACGAAC-------CGACACa
是否有人有一个快速的想法(我在每个组中有超过122个分类群,这意味着我需要创建7381个文件和200次)
所以我用的是
records=SeqIO.to_dict(SeqIO.parse("mysequence.fasta", "fasta"))
list_taxa=list(records)
#Create all possible pairs
List_pairs=[(list_taxa[i],list_taxa[j]) for i in range(len(list_taxa)) for j in range(i+1, len(list_taxa))]
count=0
SEQ_NAME="Name_seq"
for i in List_pairs:
new_pair_name=i[0]+"_"+i[1]+"_"+SEQ_NAME
output_file=open("/My_dir_where_to_create_the_files/"+new_pair_name+".fa","w")
for a in i:
print(">",records[a].id,sep="",file=output_file)
print(records[a].seq,file=output_file)
print(int(count),"/",len(list(records)))
count+=1
但是对于我创建成对对齐文件的部分来说,效率不高…假设所有文件都在同一个目录中,这应该足以列出所有可能的组合
import os
ListofFiles = []
for file in os.path(WhateverYourDirectoryContainingTheFilesIs):
if file.startswith('SEQ'):
ListofFiles.append(file)
length = len(ListofFiles)
FileCombos = []
for i in range(length):
for j in range(i+1, length):
FileCombos.append(ListofFiles[i] + " vs " + ListofFiles[j])
从这里开始,按照您喜欢的方法创建您需要的文件应该不会太困难。如果在那之前没有人做过,我明天可能会回到这里来寻找一个更具python风格的解决方案。谢谢,我成功地创建了一个代码,但它很长……我不明白您到底想要加快什么。可能文件编写占用了大部分时间。这就是你的意图——加快文件编写速度吗?没错,我有大约1476200个文件要写。你有一个玩具fasta文件,这样用户就可以根据当前版本测试代码性能了吗?我认为有一两件事情可以优化,但总的来说,我不会期望有太多的性能提升。文件写入是瓶颈,这取决于您的操作系统,而不是Python。您是否考虑过将成对文件写入数百万个单独的文件并不是解决您试图实现的问题的方法?您还可以研究类似于并行化文件写入以加快速度的方法。不过,我不得不同意T先生的观点,拥有数百万份文件不是一条好路。