count and return lines  of all *.py files in the given directory/-ies

    [paths] --> file path or list of paths to recursively count code line
    [exclude_(files/folders)_containing]
            --> list of phases in folder/file name to be excluded
                e.g. ['test', 'build']

def countLines(paths, exclude_files_containing=[],
               exclude_folders_containing=[],
               exclude_blank_lines=True,
               exclude_commented_lines=True,
               count_only_py_files=True):
    """
    count and return lines  of all *.py files in the given directory/-ies

    [paths] --> file path or list of paths to recursively count code line
    [exclude_(files/folders)_containing]
            --> list of phases in folder/file name to be excluded
                e.g. ['test', 'build']
    """
    exclude_files_containing = list(exclude_files_containing)
    #exclude this file:
    exclude_files_containing.append("countLines.py")

    loclist = []  # number of lines, filepath

    if isinstance(paths, string_types):
        paths = [paths]

    if not len(paths):
        raise Exception('need one or more paths to count lines')

    ignore = []  # ignore these signs ...
    excl = []  # exclude line if first sign is...
    if exclude_blank_lines or exclude_commented_lines:
        ignore.extend([' ', '\t', '\n'])
    if exclude_commented_lines:
        excl.append('#')

    for cur_path in paths:
        print('Check path %s' % cur_path)

        for pydir, _, pyfiles in os.walk(cur_path):
            for pyfile in pyfiles:
                if ((not count_only_py_files or pyfile.endswith(".py"))
                    and not sum([ex in pydir for ex in exclude_folders_containing])
                    and not sum([ex in pyfile for ex in exclude_files_containing])
                    ):
                    totalpath = os.path.join(pydir, pyfile)
                    lines = open(totalpath, "r").readlines()
                    # count lines:
                    if ignore:
                        n = 0
                        for l in lines:
                            for i, sign in enumerate(l):
                                if sign not in ignore:
                                    if sign in excl:
                                        i = len(l)
                                    break
                            if i and i < len(l):
                                n += 1
                    else:
                        n = len(lines)
                    loclist.append((n,
                                    totalpath.split(cur_path)[1]))

    for linenumbercount, filename in loclist:
        print("%05d lines in %s" % (linenumbercount, filename))

    print("\nTotal: %s lines (%s paths)" %
          (sum([x[0] for x in loclist]), len(paths)))