python - 使用条件匹配一行中的多个模式
问题描述
我有一个这样的fasta文件:
myfasta.fasta
>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
我有一个代码,我想根据它们的 id 来分隔序列,这些 id 具有匹配模式,如“CDS”、“tRNA”等。在下面的代码中,我正在尝试使用startswith 并匹配不匹配的模式t 似乎工作。有人可以帮我如何在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())
推荐阅读
- performance - 避免递归 Vue.js 组件和数据中不必要的观察者的策略
- java - Apache POI:如何根据 Java DateTimeFormatter 设置单元格的 dataFormat
- django - Django ORM:需要每个值的最大 ID 值列表
- java - 运行我的应用程序后,XML 文件不包含任何数据
- javascript - 如何将 AJAX 中的数据返回到 keyup 事件中
- python - 如何设置 ipython 配置文件特定的扩展?
- python - Openpyxl 工作表对象没有属性 move_range
- linux - Linux ld-linux.so 的版本化符号
- javascript - Apple Pay:如何在显示订单信息之前获取`shippingAddress`?
- python - 在 mac 与 pc 上保存和恢复 .csv 文件