2009-05-09 2 views
4

을 사용하여 파일에서 찾을 인기있는 텍스트 편집기 대화 상자에서 열립니다 다음 "파일에서 찾기"기능이 있습니다 사실루비 나 파이썬

Look For:  __searchtext__ 
File Filter: *.txt; *.htm 
Start From:  c:/docs/2009 
Report:   [ ] Filenames [ ]FileCount only 
Method:   [ ] Regex  [ ]Plain Text 

, 여러 인기있는 텍스트 편집기는 이것을 가지고 있습니다.

같은 일을하고 싶지만 텍스트 편집기 대신 파이썬이나 루비 클래스를 사용하고 싶습니다. 그런 식으로, 똑같은 종류의 뇌사 상태의 간단한 조작은 루비 나 파이썬을 지원하는 모든 플랫폼의 스크립트에서 실행할 수 있습니다.

질문 : 질문 : 나는이 글을 쓰고 싶지 않으므로 누구나 똑같은 또는 유사한 쉬운 입력 인수를 허용하는 루비 또는 파이썬 스크립트를 알고 있으며 기대했던대로 할 수 있습니까?

나는 무차별 대입 선형 검색을 수행하는 것으로 색인 된 검색과 관련이없는 것을 찾고 있습니다.

답변

5

내가 당신이 그것을 직접 쓰는 기분이 안 것을 알고 있지만, 그것은 가치가 무엇인지를 들어, 사용이 매우 쉬울 것이다 os.walk -이 같은 것을 할 수있는 : 그 파이썬의 (

results = [] 
if regex_search: 
    p = re.compile(__searchtext__) 
for dir, subdirs, subfiles in os.walk('c:/docs/2009'): 
    for name in fnmatch.filter(subfiles, '*.txt'): 
     fn = os.path.join(dir, name) 
     with open(fn, 'r') as f: 
      if regex_search: 
       results += [(fn,lineno) for lineno, line in enumerate(f) if p.search(line)] 
      else: 
       results += [(fn,lineno) for lineno, line in enumerate(f) if line.find(__searchtext__) >= 0] 

을, BTW)

+0

파일 이름 필터에 대해 잊지 않았습니까? –

+1

표준 라이브러리 fnmatch 모듈을 사용하여 os.path.join 앞에 한 줄을 추가하기 만하면됩니다. 'fnmatch.fnmatch (name, '* .txt') : continue' 등이 아닌 경우. –

+0

@ 바르 토스 : 예, 알았어요. 고마워, 알렉스. –

3

Grepper 데이비드 A. 블랙으로 루비 보석이 바로 그 일을위한 것입니다 : 내가 grep을 할 쉘을 생각

g = Grepper.new 
g.files = %w{ one.txt two.txt three.txt } 
g.options = %w{ B2 } # two lines of before-context 
g.pattern = /__search_string__/ 
g.run 

g.results.each do |file, result| 
    result.matches.each do |lineno, before, line, after| 
    etc.... 

을 루비 객체에 결과를 감싸고, 이는 grep과 동일한 옵션을 사용한다는 것을 의미합니다. 설치 대상 :

sudo gem install grepper