Python - 如何识别包含重复字母序列的字符串

时间:2014-12-04 07:42:28

标签: python

例如,如果我有一个包含大量行的文件,每行都有一个这样的字符串:

TTCCGACTGACTTACGAAAAAA

我想识别带有字母'A'序列的字符串。例如,上面的字符串在结尾处重复了六次“A”。我想识别那些'A'重复超过3次的字符串。有没有办法在python中执行此操作?

非常感谢您的帮助。

4 个答案:

答案 0 :(得分: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 :(得分:1)

Regular Expression最好在这里使用:

任何地方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

答案 2 :(得分: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.

答案 3 :(得分:-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