Python 3.x 使用BioPython将FASTA seq_ID替换为dict的新ID

Python 3.x 使用BioPython将FASTA seq_ID替换为dict的新ID,python-3.x,dictionary,replace,biopython,fasta,Python 3.x,Dictionary,Replace,Biopython,Fasta,我有一个很大的文件,里面有很多FASTA序列。其中一些需要重命名——我正在尝试用更新版本的FASTA序列ID替换它们。我将信息存储在字典中,以便旧ID是键,新ID是值。无论我做什么,我似乎都无法正确地替换ID或编写新的fasta文件。我正在使用SeqIO读取我的fasta文件。以下是我的一些代码: 这会产生记录ID的浅层替换,因为它们在此处准确打印,但在文件本身中不会实际更改: rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT',

我有一个很大的文件,里面有很多FASTA序列。其中一些需要重命名——我正在尝试用更新版本的FASTA序列ID替换它们。我将信息存储在字典中,以便旧ID是键,新ID是值。无论我做什么,我似乎都无法正确地替换ID或编写新的fasta文件。我正在使用SeqIO读取我的fasta文件。以下是我的一些代码:

这会产生记录ID的浅层替换,因为它们在此处准确打印,但在文件本身中不会实际更改:

rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT', 
             '428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}

with open('fasta.fsa') as f:
    for seq_record in SeqIO.parse(f, 'fasta'):
        for k,v in rename_fastas.items():
            if seq_record.id == k:
                seq_record.id = seq_record.description = seq_record.id.replace(k,v)
                print(seq_record.id)
这使我的新文件中有太多条目:

with open('fasta.fsa') as original, 
open('fasta2.fsa', 'w') as corrected:
    records = SeqIO.parse(original, 'fasta')
    for record in records:
        for k, v in rename_fastas.items():
            if record.id == k:
                record.id = record.description.replace(k, v)
            else: 
                record.id = record.id
            SeqIO.write(record, corrected, 'fasta')
这也不起作用,我不知道为什么:

with open('fasta.fsa') as f:
    for seq_record in SeqIO.parse(f, 'fasta'):
        seq_record.id = seq_record.description = seq_record.id.replace('428PBMC','428_PBMC')
        seq_record.id = seq_record.description = seq_record.id.replace('446_was_445','446')
        yield seq_record
任何帮助都将不胜感激

试试那个:

rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT', '428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}

with open('fasta.fsa') as original, open('fasta2.fsa', 'w') as corrected:
    for seq_record in SeqIO.parse(original, 'fasta'):
        if seq_record.id in rename_fastas:
            seq_record.id = seq_record.description = rename_fastas[seq_record.id]
        SeqIO.write(seq_record, corrected, 'fasta')
您可以打开文件进行输入和输出。您有一个具有正确键的dict,因此无需每次遍历它,只需让dict执行其工作并通过其键访问它即可。如果dict中存在密钥,则用ID的整个值替换dict中的值。最后,将更正后的记录写入输出文件。

尝试以下方法:

rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT', '428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}

with open('fasta.fsa') as original, open('fasta2.fsa', 'w') as corrected:
    for seq_record in SeqIO.parse(original, 'fasta'):
        if seq_record.id in rename_fastas:
            seq_record.id = seq_record.description = rename_fastas[seq_record.id]
        SeqIO.write(seq_record, corrected, 'fasta')
您可以打开文件进行输入和输出。您有一个具有正确键的dict,因此无需每次遍历它,只需让dict执行其工作并通过其键访问它即可。如果dict中存在密钥,则用ID的整个值替换dict中的值。最后,将更正后的记录写入输出文件