使用条件匹配一行中的多个模式

MAPK

我有一个这样的fasta文件: myfasta.fasta

>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA

我有一个代码,我想根据其ID具有匹配模式(例如“ CDS”,“ tRNA”等)的序列来分离序列。在下面的代码中,我试图使用startswith并在行中匹配模式,但不匹配。似乎行得通。有人可以帮我如何在python中查找两个条件吗?

码: python mycode.py myfasta.fasta

#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]
fasta = open(myfasta)

for line in fasta:
    if line.startswith('>') and 'CDS' in line:
        print(line)
    else:
        print(line)

预期输出(如果使用CDS):

>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
马尼茹

这是适合您的代码。如果一行具有CDS,则将打印该行和下一行。strip()在打印行时删除结束符。

#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]

flag = False
with open(myfasta) as fasta:
    for line in fasta:
        if line.startswith('>') and 'CDS' in line:
            flag = True
        elif line.startswith('>'):
            flag = False
        if flag:
            print(line.strip())

编辑:您可以删除elif部分作为以下代码:

#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]

flag = False
with open(myfasta) as fasta:
    for line in fasta:
        if line.startswith('>'):
            flag = 'CDS' in line
        if flag:
            print(line.strip())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试使用匹配多个条件,根据多个条件设置一行

Excel VBA匹配以查找与数组中包含的多个条件匹配的第一行号

一行中有多个awk模式匹配

当一行与模式“ b”匹配时,使用sed打印最后一行以与模式“ a”匹配

grep 或 sed 可以只显示与一行中的多个搜索模式匹配的单词吗?

sed 忽略模式并匹配同一行中的模式

根据多个条件将数据与熊猫中的上一行匹配

在一行文本中仅提取匹配的模式

使用sed在模式匹配后打印前一行?

仅从大型输入文件中提取与多个模式中的每一个匹配的最后一行

使用grep将与模式匹配的第一行中的所有行返回到其他模式

如何在shell中在匹配模式的那一行上方打印一行?

在同一行中搜索多个模式

计算Excel中每一行的匹配条件

在一行中匹配多个包围的字符串

如何使用正则表达式在一行中匹配多个 SSN

将模式与另一行匹配后修改一行,然后使用 awk 删除另一行

对于文件A中的每一行,请使用模式替换文件B中的所有匹配行

模式匹配后插入一行

在一行上匹配几种模式

如果一行符合条件,则用sed替换与模式范围匹配的行

Excel VBA根据多个用户窗体组合框中的多列数据匹配条件选择一行

Excel-仅当当前行的多个条件匹配时才返回一行中的单元格

在模式匹配行中搜索模式并打印下一行

Ruby-在一行上使用多个条件

MYQSL,如果查询与同一列/属性的多个条件匹配,则获得唯一行

如何使用GREP来确定文件中的每一行是否都与我的模式匹配?

从文件中读取行,如果模式在perl中匹配,则跳至下一行

保留匹配模式的连续行的每个序列中的仅第一行