编辑FASTA:如何使用regex和list更改FASTA的标题,并替换文件

2024-03-29 09:35:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似这样的FASTA:

'>NZ_UARI01000011.1 Cronobacter sakazakii strain NCTC11467, whole genome shotgun sequence GCGCATTTCTTATTACGGAGAAATACAGCAGCGTGTCTGTTTCAATTTTCAGCTTGTTCCGGATTGTTAAAGAGCAAATA CTT...

'>NZ_UARI01000001.1 Cronobacter sakazakii strain NCTC11467, whole genome shotgun sequence CAATTTTACTTGTTGATATAACAATCACGCTAACTATTCAGCCAATAGCTCCCGCATTAAAACCAGCTACTTCAGCCAAA ...

我想将标题更改为:

'>Cronobacter sakazakii strain NCTC11467_1 GCGCATTTCTTATTACGGAGAAATACAGCAGCGTGTCTGTTTCAATTTTCAGCTTGTTCCGGATTGTTAAAGAGCAAATA CTT... '>Cronobacter sakazakii strain NCTC11467_2 CAATTTTACTTGTTGATATAACAATCACGCTAACTATTCAGCCAATAGCTCCCGCATTAAAACCAGCTACTTCAGCCAAA ... (and so on) (Ignore the ' in the beginning of the header)

然后我想用头的名称保存这个文件。理想情况下,我不想制作一个新的fasta,而只是用更正替换该文件: 阪崎Cronobacter_菌株NCTC11467.fasta

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

#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()
'''



Tags: 文件thetextinimportrenewfor