以下是一个 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 和序列都将保存在输出文件中。

步骤解释:

  1. 导入 os 模块: import os 用于操作文件和目录。
  2. 定义子序列 ID 列表: subseq_ids = ['id1', 'id2', 'id3'] 定义一个列表,存储要提取的子序列的 ID。
  3. 定义输出文件路径: output_file = 'output.txt' 指定提取结果保存的文件路径。
  4. 遍历文件夹下的所有 FASTA 文件: 使用 os.listdir('.') 获取当前目录下的所有文件,并循环遍历每个文件。
  5. 判断文件类型: 使用 file.endswith('.fasta') 判断当前文件是否为 FASTA 文件。
  6. 打开 FASTA 文件: 使用 with open(file) as f: 打开 FASTA 文件,并使用 with 语句确保文件在使用完毕后自动关闭。
  7. 初始化序列信息: 使用 curr_id = ''curr_seq = '' 初始化当前序列的 ID 和序列。
  8. 逐行读取 FASTA 文件: 使用 for line in f: 循环遍历 FASTA 文件中的每一行。
  9. 判断是否为序列 ID: 使用 line.startswith('>') 判断当前行是否为序列 ID。
  10. 检查序列 ID 是否在列表中: 使用 line[1:] in subseq_ids 检查当前序列 ID 是否在预定义的子序列 ID 列表中。
  11. 保存序列信息: 如果当前序列 ID 在列表中,则使用 with open(output_file, 'a') as out_f: 打开输出文件,并使用 out_f.write() 将序列 ID 和序列写入文件。
  12. 更新当前序列信息: 如果当前序列 ID 在列表中,则使用 curr_id = line[1:]curr_seq = '' 更新当前序列的 ID 和序列。
  13. 忽略非目标序列: 如果当前序列 ID 不在列表中,则使用 curr_id = ''curr_seq = '' 清空当前序列信息,并忽略该序列。
  14. 处理非 ID 行: 如果当前行不是序列 ID,则将其添加到当前序列的序列中,使用 curr_seq += line
  15. 保存最后一个序列: 最后,使用 if curr_id != '': 判断是否还有未保存的序列信息,如果存在,则将其保存到输出文件。

这段代码提供了一个完整的示例,帮助你理解如何从 FASTA 文件中提取特定子序列。你可以根据自己的需求修改子序列 ID 列表、输出文件路径以及其他参数。

Python 提取 FASTA 文件子序列并保存 - 代码示例

原文地址: http://www.cveoy.top/t/topic/lMye 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录