【发布时间】:2017-06-20 15:13:34
【问题描述】:
我正在尝试用 python 编写一个代码来帮助我在两个特定字符串之间寻找一个字符串。当我用单个字符串实现代码时,我得到了所需的输出。但是,我需要匹配序列数组中的模式。它一直给我一个错误。
定义一个函数来查找两个用户指定序列之间的模式:
import re
def find_between(prefix, suffix, text):
pattern = r"{}\s*(.*)\s*{}".format(re.escape(prefix), re.escape(suffix))
result = re.search(pattern, text, re.DOTALL)
if result:
return result.group(1)
else:
return None
当我尝试单个字符串时,它可以工作:
text = "AGGTCCTGTAAACCT"
prefix = "TCCT"
suffix = "ACCT"
find_between(prefix, suffix, text)
输出:'GTAA'
但是当我尝试读取 fastq 文件并执行搜索时,却没有:
seqs = readFastq('FN1.fastq')
text = seqs
prefix = "TCCT"
suffix = "ACCT"
find_between(prefix, suffix, text)
它抛出了这个错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-9c35672e7561> in <module>()
2 prefix = "TCCT"
3 suffix = "ACCT"
----> 4 find_between(prefix, suffix, text)
<ipython-input-19-5f42599c717f> in find_between(prefix, suffix, text)
3 def find_between(prefix, suffix, text):
4 pattern = r"{}\s*(.*)\s*{}".format(re.escape(prefix), re.escape(suffix))
----> 5 result = re.search(pattern, text, re.DOTALL)
6 if result:
7 return result.group(1)
/Users/shravantikrishna/anaconda/lib/python3.6/re.py in search(pattern, string, flags)
180 """Scan through string looking for a match to the pattern, returning
181 a match object, or None if no match was found."""
--> 182 return _compile(pattern, flags).search(string)
183
184 def sub(pattern, repl, string, count=0, flags=0):
TypeError: expected string or bytes-like object
【问题讨论】:
-
文本变量可能不是字符串或字节。如果你打印出类型(文本),你会得到什么?您可以在调用 find_between...之前将“文本”转换为实际的字符串或字节对象...
-
还是不行。另外,您知道如何允许前缀和后缀中最多两个字母不匹配吗?在实际情况下,后缀和前缀将是同一个字符串。
标签: python pattern-matching jupyter-notebook fastq sequencing