john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

grep sys argv os walk find

import sys
import os


def line_count_and_contains( filename, target ):
    count = 0
    found = False
    with open( filename ) as f:
        for line in f:
            count += 1
            result = line.find( target )
            if result > 0:
                print "FOUND:", target, count, ",", result, filename
                found = True
    return count, found


def walk_count_contains( start , target, extension=None ):
    total_files = 0
    total_lines = 0
    for dirpath, directorynames, filenames in os.walk( start ):
        for f in filenames:
            total_files += 1
            search = True
            if extension and not f.endswith( extension ):
                search =  False
            if search:
                current_lines, found = line_count_and_contains( os.path.join( os.path.normpath( dirpath), f ) , target )
                total_lines += current_lines
    return total_files, total_lines


if __name__ == '__main__':
    if len( sys.argv ) < 3:
        print "correct usage: python grep.py startdirectory targetstring [extension] (e.g. python grep.py /tmp author .txt)"
        sys.exit( 1 )
    startpath = os.path.normpath( sys.argv[1] )
    targetstring = sys.argv[2]
    if len( sys.argv ) == 4:
        extension = sys.argv[3]
    else:
        extension = None

    print "searching for:", targetstring, "in", startpath,
    if extension:
        print "filtered by:", extension

    total_files, total_lines = walk_count_contains( startpath , targetstring, extension )
    print total_lines, "lines in", total_files, "files"

  • « Multiple monitors randr gui arandr lubuntu
  • last modified directory time date formatting »

Published

Jul 4, 2013

Category

python

~150 words

Tags

  • argv 3
  • find 13
  • grep 1
  • os 7
  • python 180
  • sys 1
  • walk 1