Python 提取 FASTA 文件子序列并保存 - 代码示例
以下是一个 Python 代码示例,用于从一个文件夹下的所有 FASTA 文件中截取多个子序列的 ID 和序列,并保存在一个文件中:
import os
# 定义要截取的子序列的 ID 列表
subseq_ids = ['id1', 'id2', 'id3']
# 定义输出文件路径
output_file = 'output.txt'
# 遍历文件夹下的所有 FASTA 文件
for file in os.listdir('.'):
if file.endswith('.fasta'):
# 打开 FASTA 文件
with open(file) as f:
# 初始化当前序列的 ID 和序列
curr_id = ''
curr_seq = ''
# 遍历 FASTA 文件中的每一行
for line in f:
line = line.strip()
# 如果当前行是一个新的序列的 ID
if line.startswith('>'):
# 如果当前序列的 ID 在要截取的子序列 ID 列表中
if line[1:] in subseq_ids:
# 则保存之前的序列信息
if curr_id != '':
with open(output_file, 'a') as out_f:
out_f.write(curr_id + '\n' + curr_seq + '\n')
# 更新当前序列的 ID 和序列
curr_id = line[1:]
curr_seq = ''
else:
# 如果当前序列的 ID 不在要截取的子序列 ID 列表中,则忽略该序列
curr_id = ''
curr_seq = ''
else:
# 如果当前行是序列的一部分,则将其添加到当前序列的序列中
curr_seq += line
# 保存最后一个序列的信息
if curr_id != '':
with open(output_file, 'a') as out_f:
out_f.write(curr_id + '\n' + curr_seq + '\n')
这段代码首先定义了要截取的子序列的 ID 列表和输出文件路径。然后,它遍历文件夹下的所有 FASTA 文件。对于每个文件,代码打开文件并逐行读取。当遇到一个新的序列 ID 时,代码会检查该 ID 是否在要截取的子序列 ID 列表中。如果是,则代码保存之前的序列信息并更新当前序列的 ID 和序列。如果不是,则代码忽略该序列。当遇到序列的一部分时,代码将其添加到当前序列的序列中。最后,代码保存最后一个序列的信息。所有截取的子序列的 ID 和序列都将保存在输出文件中。
步骤解释:
- 导入 os 模块:
import os用于操作文件和目录。 - 定义子序列 ID 列表:
subseq_ids = ['id1', 'id2', 'id3']定义一个列表,存储要提取的子序列的 ID。 - 定义输出文件路径:
output_file = 'output.txt'指定提取结果保存的文件路径。 - 遍历文件夹下的所有 FASTA 文件: 使用
os.listdir('.')获取当前目录下的所有文件,并循环遍历每个文件。 - 判断文件类型: 使用
file.endswith('.fasta')判断当前文件是否为 FASTA 文件。 - 打开 FASTA 文件: 使用
with open(file) as f:打开 FASTA 文件,并使用with语句确保文件在使用完毕后自动关闭。 - 初始化序列信息: 使用
curr_id = ''和curr_seq = ''初始化当前序列的 ID 和序列。 - 逐行读取 FASTA 文件: 使用
for line in f:循环遍历 FASTA 文件中的每一行。 - 判断是否为序列 ID: 使用
line.startswith('>')判断当前行是否为序列 ID。 - 检查序列 ID 是否在列表中: 使用
line[1:] in subseq_ids检查当前序列 ID 是否在预定义的子序列 ID 列表中。 - 保存序列信息: 如果当前序列 ID 在列表中,则使用
with open(output_file, 'a') as out_f:打开输出文件,并使用out_f.write()将序列 ID 和序列写入文件。 - 更新当前序列信息: 如果当前序列 ID 在列表中,则使用
curr_id = line[1:]和curr_seq = ''更新当前序列的 ID 和序列。 - 忽略非目标序列: 如果当前序列 ID 不在列表中,则使用
curr_id = ''和curr_seq = ''清空当前序列信息,并忽略该序列。 - 处理非 ID 行: 如果当前行不是序列 ID,则将其添加到当前序列的序列中,使用
curr_seq += line。 - 保存最后一个序列: 最后,使用
if curr_id != '':判断是否还有未保存的序列信息,如果存在,则将其保存到输出文件。
这段代码提供了一个完整的示例,帮助你理解如何从 FASTA 文件中提取特定子序列。你可以根据自己的需求修改子序列 ID 列表、输出文件路径以及其他参数。
原文地址: http://www.cveoy.top/t/topic/lMye 著作权归作者所有。请勿转载和采集!