2013-06-25 2 views
0

나는 경기 시작 위치를 문자열의 하위 문자열의 모든 항목을 일치 반환해야 (하지만 그들은 여전히 ​​입력 파일에있을 것입니다)파이썬 일치하는 모든 문자열과 반대로 문자열

그리고 난 정확히이 코드가 잘못 무엇인지 모르겠지만 인쇄 (무한 루프) 유지 출력 파일에 0을 인쇄합니다. 코드를 붙여 넣을 때

#!/usr/bin/env python 
import sys 
from operator import itemgetter 
def find_all(a_str, sub): 
    start = 0 
    while True: 
     start = a_str.find(sub, start) 
     if start == -1: return 
     yield start 
     start += len(sub) 

if __name__ == '__main__': 
    testnum=0 
    input_file = open(sys.argv[1]) 
    #input_lines=input_file.split("\n") 
    output_file = open(sys.argv[2],"w") 
    while True: 
     testnum+=1 
     values_raw = input_file.readline() 
     #values_raw=raw_input() ##rubish 
     values=values_raw.split() 
     flag=0 
     for element in values: 
      if element == "0": 
      break 
     string1=str(input_file.readline()) 
     string2=str(input_file.readline()) 
     lista = find_all(string2,string1) 
     output_file.write("\nTeste "+str(testnum)+"\nocorrencia direta: ") 
     for item in lista: 
     output_file.write(str(item)+" ") 
     #reversed search 
     string1=string1[::-1] 
     lista = find_all(string2,string1) 
     output_file.write("\nTeste "+str(testnum)+"\nocorrencia inversa complementar: ") 
     for item in lista: 
     output_file.write(str(item)+" ") 
     if ((len(string1)==0)): 
     break 

내가 실수로 문자열 1과 문자열 2 라인을 제거 // 나는 원래과 반전의 경기를 일치하지만, 코드는 내가 너무 그것을 게시하지한다고 생각 거의 동일하다.

+1

'요소가 == 0 '항상 false 인 경우. 'element'는 숫자가 아닌'str'입니다. 게다가,'string1'과'string2'는 결코 할당되지 않습니다 -이 코드에는 바인딩이 없습니다. – Elazar

+0

실수로 원래의 게시에서 파일을 제거했지만 파일을 읽으려는 작업이 잘못되었다고 생각합니다 ... – Mansueli

답변

1

당신은 regex를 사용할 수 있습니다

>>> import re 
>>> pat = 'CATA' 
>>> strs = 'TCATATGCAAATAGCTGCATACCGA' 
>>> [m.start() for m in re.finditer(pat, strs)] 
[1, 17] 
+0

역 패턴을 일치 시키려면'set ([m.start() re.finditer (pat [:: - 1], strs)]에서 m에 대해 set ([m.start()])'re.finditer (pat, strs) – wflynny

관련 문제