例如,如果我有一个包含大量行的文件,每行都有一个这样的字符串:
TTCCGACTGACTTACGAAAAAA
我想识别带有字母'A'序列的字符串。例如,上面的字符串在结尾处重复了六次“A”。我想识别那些'A'重复超过3次的字符串。有没有办法在python中执行此操作?
非常感谢您的帮助。
答案 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