2017-11-10 1 views
2

알파 문자가 포함 된 모든 공백 구분 필드에 대해 텍스트 파일을 스캔하는 유틸리티를 작성했지만 모든 행을 단어로 분할하고 각각을 스캔하므로 매우 효과적입니다. 단어, 더 빠른 방법이 있나요?텍스트 파일의 모든 단어를 빠르게 찾을 수있는 방법

감사합니다.

#!/bin/python 
import argparse 
import sys 
import time 

parser = argparse.ArgumentParser(description='Find all alpha characters in 
an input file') 
parser.add_argument('file', type=argparse.FileType('r'), 
help='filename.txt') 

args = parser.parse_args() 

def letters(input): 
    output = [] 
    for character in input: 
     if character.isalpha(): 
      output = input 
    return output 

def main(argv): 

    start = time.time() 
    fname = sys.argv[1] 

    f = open(fname) 
    for line in f: 
     words = line.rstrip().split() 
     for word in words: 
      alphaWord = letters(word) 
      if alphaWord: 
       print(alphaWord) 
    f.close() 

    end = time.time() 
    elapsed = end - start 
    print "%s secs elapsed" % elapsed 

if __name__ == "__main__": 
    main(sys.argv) 
+1

'str'은 파이썬에서 키워드입니다. 변수 이름으로 사용하지 마십시오! – alfasin

+0

감사합니다. – iheartcpp

+0

'filter (str.isalpha, line.split())'가 더 빨라졌습니다. –

답변

5

프로그램이 letters()에 버그가 있습니다 : 여기

코드입니다

def letters(input): 
    output = [] 
    for character in input: 
     if character.isalpha(): 
      output = input # after we get here we'll keep iterating 
          # even though the result will not change 
    return output 

당신이 모든 문자를 반복하고 그 경우에도 하나의 숫자입니다 일을하는지, 입력을 output에 저장 하겠지만 나머지 문자는 계속 반복합니다. 아무 것도 추가하지 않습니다.

모든 문자를 확인한 다음 (프로그램이 잘못된 결과를 반환 함) 프로그램이 올바른 결과를 반환하면 output = input 줄 뒤에 break이 표시 될 수 있습니다. 그것은 그래서 만약 당신이이 단어에서 번호를 제거 될 수있는 단어를 반환 한 경우에도 배열

에 추가하지 않기 때문에 이것은 단지 하나 개의 문자를 반환하는 단어를 반환하지 않습니다

+0

또는'입력이 있으면 그 값을 반환하십시오 (map (str.isalpha, input)) else []' –

0
for character in input: 
    if character.isalpha(): 
     output = input 
    return output 

"12ab34"와 같은 단어가 여전히 단어로 간주되지만 의도가 맞다면 괜찮습니다.

관련 문제