首页 > 解决方案 > 编辑 FASTA:如何使用正则表达式和列表更改 FASTA 的标题,并替换文件

问题描述

我有一个看起来像这样的 FASTA:

'>NZ_UARI01000011.1 阪崎克罗诺杆菌菌株NCTC11467,全基因组鸟枪法序列GCGCATTTCTTATTACGGAGAAATACAGCAGCGTGTCTGTTTCAATTTTCAGCTTGTTCCGGATTGTTAAAGAGCAAATA CTT...

'>NZ_UARI01000001.1 阪崎克罗诺杆菌菌株NCTC11467,全基因组鸟枪法序列CAATTTTACTTGTTGATATAACAATCACGCTAACTATTCAGCCAATAGCTCCCGCATTAAAACCAGCTACTTCAGCCAAA ...

我想将标题更改为:

'>阪崎克罗诺杆菌菌株 NCTC11467_1 GCGCATTTCTTATTACGGAGAAATACAGCAGCGTGTCTGTTTCAATTTTCAGCTTGTTCCGGATTGTTAAAGAGCAAATA CTT... '>阪崎克罗诺杆菌菌株 NCTC11467_2 CAATTTTACTTGTTGATATAACAATCACGCTAACTATTCAGCCAAATAGCTCCCGCATTAAAACCAGCICTACTTCAGCCAAA 开头...

然后我想用标题的名称保存这个文件。理想情况下,我不想制作新的fasta,而只是用更正替换文件:Cronobacter_sakazakii_strain NCTC11467.fasta

现在这很容易单独完成,但我有超过 600 个文件。所以做每个人的想法不是我想走的路线。我在这里编写了一个脚本,在其中我使用正则表达式隔离了我想要的标题部分并将其存储在一个名为 new_new 的列表中。然后我想匹配这些值并替换为以“>”开头的每一行,然后添加 _1/2/3/... 或随后的 #(如上所示)。你能帮我完成这个任务吗?如果我提供的脚本不值得继续,并且您有更好的解决方案,请告诉我。

#usr/bin/python
import sys
import os
import re
import csv
#sys.argv[1] =fasta 
#sys.argv[2] = list of header names (mass) 
#Gather existing headers to list (new_new)
with open(sys.argv[1], "r+") as text_file:
    lines = text_file.readlines()[1:]
    mylist = []
    new_new = []
    for i in lines:
        if '.' in i:
            mylist.append(i)
    pattern = r">*Cronobacter +\w* +\w* +.*[,]" 
    regex = re.compile(pattern, re.IGNORECASE)
    for j in mylist: 
        for match in regex.finditer(j): 
            value = match.group(0)
            new_new.append(value)
            for k in lines: 
                if '>' in k:
                    k= k.replace('.*',new_new[value])
text_file.close()
'''


标签: pythonregexlistloopsfasta

解决方案


推荐阅读