2014-12-04 39 views
-2

例如序列中的字符串,如果我有一個包含大量行的文件,每一行都有這樣的字符串:Python的 - 如何識別含重複字母

TTCCGACTGACTTACGAAAAAA

我想要識別具有字母'A'的序列的字符串。例如,上面的字符串在最後重複六次'A'。我想用'A'重複3次以上的字符串。有沒有辦法在Python中做到這一點?

非常感謝您的幫助。

+0

你可以寫一個邏輯是,即使有沒有預定義的庫函數。 – 2014-12-04 07:44:28

+0

[正則表達式](https://docs.python.org/2/library/re.html) – khelwood 2014-12-04 07:47:14

+0

重複超過三次或只有最後? – Hackaholic 2014-12-04 08:03:19

回答

1

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

+0

感謝您的支持!我推遲了學習RE,但我現在應該這樣做。 – Joshlhj 2014-12-04 13:54:04

+0

是的,它非常強大。謝謝 :) – Hackaholic 2014-12-04 14:01:52

1

你必須逐行讀取你的文件(我的代碼中的前兩行實際上就是一個習慣用法),並檢查字符串'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

請注意,在第二個示例中,您只循環匹配行,這可能是您想要執行的操作,或者不是......如果您想對所有行執行某些操作併爲匹配的操作執行特殊操作,則採用第一種解決方案。

-1

只需在文件的每一行使用此功能。

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 
+0

當你可以在一行中檢查s'是否'AAAA'時,爲什麼要手動檢查每個子字符串? – khelwood 2014-12-04 08:01:41

+0

有時我覺得不夠pythonic:D – riotbit 2014-12-04 08:05:38

0

使用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.