我試圖在python中編寫代碼,這將幫助我查找兩個特定字符串之間的字符串。當我用一個字符串實現代碼時,我會得到所需的輸出。但是,我需要在一系列序列中匹配模式。它一直拋出我一個錯誤。在python中查找兩個字符串之間的特定模式 - fastq文件 - 測序讀取
定義一個函數來尋找兩個用戶指定的序列之間的模式:
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之前,您可以將「文本」轉換爲實際的字符串或字節對象... –
它仍然不起作用。另外,你知道我如何允許在前綴和後綴中最多有兩個字母不匹配嗎?在真實情況下,後綴和前綴將是相同的字符串。 – user8033590