solution_126.py

#!/usr/bin/python3
# ====================================================================
# PY file line counter
# ====================================================================

import os
import re
import sys
import user_interface as ui

blank_line_count   = 0
code_line_count    = 0
comment_line_count = 0
function_count     = 0
read_line_count    = 0

file_type_regexp = re.compile(r'\.py$',re.IGNORECASE)
function_regexp  = re.compile(r'^def ') 

# --------------------------------------------------------------------
# ---- main
# --------------------------------------------------------------------


while True:

    print()
    fn = ui.get_user_input('Enter PY file name: ')

    if not fn:
        ##print('\nExit Program\n')
        ##sys.exit()
        break

    if not re.search(file_type_regexp,fn):
        print('\nfile is not a PY file - program exit\n')
        sys.exit()

    with open(fn,'r') as fin:
    
        for line in fin:
        
            read_line_count += 1
        
            line = line.strip()

            if line == '':
                blank_line_count += 1
                continue

            if line[0] == '#':
                comment_line_count += 1
                continue

            if re.search(function_regexp,line):
                function_count += 1
            
            code_line_count += 1

    print()
    print(f'---- file stats --------------------------')
    print(f'file name     : {os.path.basename(fn)}')
    print(f'lines read    : {read_line_count:<4}')
    print(f'function count: {function_count:<4}')
    pcent = round((blank_line_count/read_line_count)*100,1)
    print(f'blank lines   : {blank_line_count:<4} %{pcent}')
    pcent = round((code_line_count/read_line_count)*100,1)
    print(f'code lines    : {code_line_count:<4} %{pcent}')
    pcent = round((comment_line_count/read_line_count)*100.0,1)
    print(f'comment lines : {comment_line_count:<4} %{pcent}')
    print()

print()