2012-07-19 2 views

답변

0

이것은 당신에게 포함 인덱스

In [112]: lines = filehandle.readlines() 

In [113]: for elem in lines: 
    .....:  if elem.find(substr) > -1: 
    .....:   print lines.index(elem) 
    .....: 

를 제공해야하는 모든 인덱스의 SUBSTR

여러 차례 나오는
In [122]: text = ['abc', 'def', 'ghi'] 

In [123]: for elem in text: 
    .....:  if elem.find('e') > -1: 
    .....:   print text.index(elem) 
    .....: 
1 
+0

@eumiro : yes 그러나 substr을 포함하는 요소이며 substr을 포함하는 요소의 인덱스가 필요합니다 – avasal

+0

@eumiro : 요소에 substr이 있는지 검사하는 if 조건에서 수행하고 있습니다 – avasal

+0

@eumiro : 귀하의 의심 pls check – avasal

-2
try: 
    lstLines = fileHandle.readlines(): 
    lineNumber = lstLines.index("strSearch") 
except: 
    print "not found" 
+3

우리가'fileHandle'을 제공하고''strSearch''를 변수 또는 뭔가로 대체하더라도이 코드는 여전히 작동하지 않을 것입니다. 여기서 우리는 무엇을 잡을 수 있습니까? 예외는 발생하지 않습니다. 또한, 그것이 효과가 있다고하더라도, 그것들은 부분 문자열이 아닌 전체 라인에만 매치 될 것입니다. -1 – muhuk

4
for i, line in enumerate(filehandle, 1): 
    if text in line: 
     print i, line 
1

당신은 그것을 필터링 filter를 사용할 수의. 원하는 조건에 맞는 람다 함수를 제공하십시오 (예 : 여기서는 행의 일치).

그리고 두 번째 매개 변수로 검사 할 모든 행의 목록 (반복자)을 지정하십시오. λ 기능에 대한 (line, line-number) 튜플의 반복자를 사용하려면 izip을 사용합니다.

아래 기능을 확인하십시오 : 여기서 볼 수있는 제한 사항은 2^31 - 1 개 미만의 파일에 대해서만 작동한다는 것입니다.

또한 일치하는 모든 줄 중 줄 번호 목록을 반환합니다.

from itertools import izip 
def find_line_num_in_file(file, line): 
    f = open(file, "r") 
    matches = filter(lambda x: line in x[0], izip(f.readlines(), xrange(-1 + 2**31))) 
    f.close() 
    return [m[1] for m in matches] 

줄이 이미있는 경우 (반복자가 아님)이 작업을 수행 할 수 있습니다.

def find_line_num_in_lines(lines, line): 
    matches = filter(lambda x: line in x[0], zip(lines, range(len(lines)))) 
    return [m[1] for m in matches] 
+0

itertools.count (1) IMHO는'(x) range'보다 읽기 쉽습니다. –