例如序列中的字符串,如果我有一个包含大量行的文件,每一行都有这样的字符串: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