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+) 捕获的字符)。