例如序列中的字符串,如果我有一個包含大量行的文件,每一行都有這樣的字符串:Python的 - 如何識別含重複字母
TTCCGACTGACTTACGAAAAAA
我想要識別具有字母'A'的序列的字符串。例如,上面的字符串在最後重複六次'A'。我想用'A'重複3次以上的字符串。有沒有辦法在Python中做到這一點?
非常感謝您的幫助。
例如序列中的字符串,如果我有一個包含大量行的文件,每一行都有這樣的字符串:Python的 - 如何識別含重複字母
TTCCGACTGACTTACGAAAAAA
我想要識別具有字母'A'的序列的字符串。例如,上面的字符串在最後重複六次'A'。我想用'A'重複3次以上的字符串。有沒有辦法在Python中做到這一點?
非常感謝您的幫助。
Regular Expression
最好用在這裏:
A 3或以上的任何地方:
>>> s="TTCCGACTGACTTACGAAAAAA"
>>> import re
>>> m = re.search('A{3,}',s)
>>> if m:
... print"A is more than 3 times"
...
A is more than 3 times
在結束檢查:
>>> m = re.search('A{3,}$',s)
>>> if m:
... print"A is more than 3 times at end"
...
A is more than 3 times at end
A {3,}將匹配AAA或AAAA或更多。但TI不匹配A,AA
我已經展示了3個或更多,如果你想超過3使用A{4,}
瞭解正則表達式在這裏:Regular Expression
感謝您的支持!我推遲了學習RE,但我現在應該這樣做。 – Joshlhj 2014-12-04 13:54:04
是的,它非常強大。謝謝 :) – Hackaholic 2014-12-04 14:01:52
你必須逐行讀取你的文件(我的代碼中的前兩行實際上就是一個習慣用法),並檢查字符串'AAAA'(超過三個連續的A)是否包含在當前行中。
如果當前行包含「AAAA」,那麼你必須處理它...
with open('your_data_file') as f:
for line in f:
if 'AAAA' in line:
process(line)
...
稍微更緊湊,更晦澀
with open('your_data_file') as f:
for line in (l in f if 'AAAA' in l):
process(line)
這種特殊的結構被稱爲generator。
請注意,在第二個示例中,您只循環匹配行,這可能是您想要執行的操作,或者不是......如果您想對所有行執行某些操作併爲匹配的操作執行特殊操作,則採用第一種解決方案。
只需在文件的每一行使用此功能。
def has_s_a_sequence_of_three_as_in_it(s):
for i in range(0,len(s)-3):
if s[i:i+4] == 'AAAA':
return True
return False
print(has_s_a_sequence_of_three_as_in_it('dasdasdasdasAAAA')) # True
print(has_s_a_sequence_of_three_as_in_it('dAAAasAdasdAAAasdasAA')) # False
print(has_s_a_sequence_of_three_as_in_it('dasdAAAAAAAasdasdas')) # True
使用if 'A'*3 in line
。因此'A'* 3 = AAA
符合if
條款。
with open(somefile) as f:
for line in f:
if 'A'*3 in line:
do something.
你可以寫一個邏輯是,即使有沒有預定義的庫函數。 – 2014-12-04 07:44:28
[正則表達式](https://docs.python.org/2/library/re.html) – khelwood 2014-12-04 07:47:14
重複超過三次或只有最後? – Hackaholic 2014-12-04 08:03:19