Fasta文件批量更改ID名(正则表达式)

python

import os
import re
from Bio import SeqIO

def modify_fasta_ids(input_fasta, output_fasta, pattern, replacement):
    with open(output_fasta, 'w') as out_file:
        for record in SeqIO.parse(input_fasta, "fasta"):
            # 修改ID
            record.id = re.sub(pattern, replacement, record.id)
            record.description = re.sub(pattern, replacement, record.description)
            # 写入修改后的记录
            SeqIO.write(record, out_file, "fasta")

def batch_modify_fasta_ids(directory, pattern, replacement):
    for filename in os.listdir(directory):
        if filename.endswith(".fasta"):
            input_fasta = os.path.join(directory, filename)
            output_fasta = os.path.join(directory, f"modified_{filename}")
            modify_fasta_ids(input_fasta, output_fasta, pattern, replacement)
            print(f"Processed {filename}, saved to {output_fasta}")

if __name__ == "__main__":
    # 设定目录、匹配模式和替换字符串
    directory = "."
    pattern = r"old_part(\d+)"  # 修改此处以适应你的实际模式
    replacement = r"new_part\1"  # 修改此处以适应你的实际替换

    batch_modify_fasta_ids(directory, pattern, replacement)

注:

正则表达式可以用于匹配任何字符,而不仅仅是数字。

捕获组可以匹配字母、文字或其他字符集。这里是一个更通用的示例,说明如何处理文本和字母。示例:捕获文本或字母正则表达式模式old_part(\w+):这将匹配字符串 old_part 后跟一个或多个字母、数字或下划线,并捕获这些字符。\w+ 匹配一个或多个字母、数字或下划线。替换字符串new_part\1:在替换字符串中,\1 引用了第一个捕获组(即 (\w+) 捕获的字符)。

捕获字母和数字的部分如果需要匹配不同类型的字符,例如字母、数字、特殊字符等,可以使用不同的字符类。

示例:捕获不同类型的字符假设你想捕获 old_part 后面的任何字符(非空格),可以使用 (\S+):正则表达式模式old_part(\S+):这将匹配字符串 old_part 后跟一个或多个非空白字符,并捕获这些字符。\S+ 匹配一个或多个非空白字符。替换字符串new_part\1:在替换字符串中,\1 引用了第一个捕获组(即 (\S+) 捕获的字符)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值