【问题标题】:Extracting sequences in Python在 Python 中提取序列
【发布时间】:2015-09-20 19:13:13
【问题描述】:

我有一个如下所示的文件:

>sequence_name_16hj51
CAACCTTGGCCAT
>sequence_name_158ghni52
AATTGGCCTTGGA
>sequence_name_468rth
AAGGTTCCA

我想获得这个: ['CAACCTTGGCCAT', 'AATTGGCCTTGGA', 'AAGGTTCCA']

我有一个列表,其中包含标题为title_finder 的所有序列名称。当我尝试使用时:

for i in range(0,len(title_finder)):
    seq = seq.split(title_finder[i])
    print seq

我得到了这个回溯:

Traceback (most recent call last):
  File "D:/Desktop/Python/consensus new.py", line 23, in <module>
    seq = seq.split(title_finder[i])
AttributeError: 'list' object has no attribute 'split'

有人可以帮帮我吗?

编辑:有时某些序列跨越多行,因此当我使用 for 循环执行此操作时会得到多个字符串。

【问题讨论】:

标签: python string split sequence bioinformatics


【解决方案1】:

如果你在做生物信息学,你真的应该考虑安装BioPython

from Bio import SeqIO
with open('your_file.fasta') as f:
    return [str(record.seq) for record in SeqIO.parse(f, "fasta")]

如果您想在纯 Python 中执行此操作,则可以这样做:

with open('your_file.fasta') as f:
    print [line.rstrip() for line in f if not line.startswith('>')]

【讨论】:

  • 我赞成使用 Biopython,它会为您处理 FASTA 文件并完成很多繁琐的工作。如果你真的需要一个字符串,你可以随时将它转换成一个字符串。
【解决方案2】:

您正在尝试拆分为您提供 AttributeError 的列表,而不是您可以读取文件行并检查该行是否不以 &gt; 开头,然后保留它。

With open('file_nam') as f:
    my_patterns=[line.rstrip() for line in f in not line.startswith('>')]   

如果您确定模式在奇数行中,也可以作为一种替代和 Pythonic 方式,您可以使用 itertools.islice 对文件对象进行切片:

from itertools import islice
With open('file_nam') as f:
     my_my_patterns=list(islice(f,1,None,2))

请注意,如果您只想循环遍历您的模式,则无需将 islice 的结果转换为列表,您可以简单地遍历您的迭代器。

【讨论】:

  • 您需要在line 之后添加rstrip(),因为现在序列的末尾包含换行符。
  • islice 也包括\n
【解决方案3】:

假设你的文件是 seq.in,那么你可以这样做来获取你的列表:

In [17]: with open ('seq.in','r') as f:
          extracted_list=[line[:-1] for line in f if line[0]!='>']

In [18]: extracted_list
Out[18]: ['CAACCTTGGCCAT', 'AATTGGCCTTGGA', 'AAGGTTCCA']

【讨论】:

    【解决方案4】:
    line = ""
    
    import re
    
    with open('test') as f:
      lines = [line.rstrip()  for line in f if not re.search('sequence_name', line)]
    

    打印(行)

    ['CAACCTTGGCCAT', 'AATTGGCCTTGGA', 'AAGGTTCCA']

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2021-03-14
      • 2021-01-22
      • 1970-01-01
      • 2022-11-01
      • 2022-07-12
      • 1970-01-01
      • 2019-12-24
      相关资源
      最近更新 更多