读取 fasta 文件并编辑 python 中的行

Reading fasta files and edit the lines in python

我是编程新手,这是我第一次使用 python。我正在编写一个应该读取 fasta 文件并删除每个序列的 header 的代码。 我读取文件的代码:

def read_fasta(inputfile):
    with open(inputfile,'r') as f:
        file=f.readlines()
    f.close
    return file

fasta_file=read_fasta('SELEX_100_reads.txt')

print(fasta_file)

fasta 文件的输出如下所示:

['@DBV2SVN1:110:B:7:1101:1456:2092\n', 'CTAAAAAGCGAGTGCGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNANNNNNNCNNNNNNNNAAACANNAAGGTAAGAAACAAGCACAGATGAGAGC\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2491:2141\n', 'AAGTGAGCAAACAGAAACATAGTGCGGAGTGGGAAAATGAGACTCAAAAAAAGAGTGTGGGTATTCAGTAGGGGATATTAGGCCACAATACGAAAGAGCAA\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2924:2130\n'......]

这是一个包含每个序列的 header 的列表。因此我只想要每行的 DNA 序列(CTAAAA 或 AAGTAAAGCA)作为列表。 任何人都可以帮我吗? 非常感谢

干杯, 约翰

  • 从这个问题来看,我认为你想要的是所有的DNA序列线。
  • 如果行包含除 A、C、G、T 以外的任何内容,您可以对其进行过滤。
def read_fasta(inputfile):
    with open(inputfile,'r') as f:
        file=f.readlines()
    ret = []
    for line in file:
        if set(strip(line)) == {'A','G','T','C'}:
            ret.append(strip(line)) 
    return ret 

fasta_file=read_fasta('SELEX_100_reads.txt')

print(fasta_file)

您可以使用正则表达式过滤器。假设您只想要包含一个或多个 A/C/G/T 或 N 个字符的行(除了换行符和任何其他尾随空格),您可以这样做:

import re

file = list(filter(re.compile("[ACGTN]+\s*$").match, file))

删除其他行。

如果不打算包含包含 N 的字符串(我对生物化学的了解不够了解它们代表什么 - 从事物的外观来看不是核苷酸),那么显然从中排除 N正则表达式

您可以将 DNA 筛选到新列表中:

only_dna = fasta_file[1::6]

在[1::6]中,1为起始位置,6为列表中的“跳过间隔”