2014-12-04 41 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.