HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Counting Lines and Sum of Lines

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
andcountinglinessum

Problem

I have a small function that when passed a str that names a file that contains a program; it returns a 2-tuple with the number of the non-empty lines in that program, and the sum of the lengths of all those lines. Here is my current functioning code:

def code_metric(file_name):
    line_count = char_count = 0
    with open(file_name) as fin:
        stripped = (line.rstrip() for line in fin)
        for line_count, line in enumerate(filter(None, stripped), 1):
            char_count += len(line)
    return line_count, char_count


Is there a way to implement this function using functionals such as map, filter, and reduce and small lambdas to pass to these functionals? I could make it work conventionally but having some issue with using functionals. Any help would be great.

Solution


  • line_count can be obtained with len(lines) instead of an enumerate.



  • You use rstrip (rightstrip), I think that strip is better as you (probably) don't want to count the blanks of indentation as characters.



  • f is the standard name for files in Python not fin



  • Using list comprehension and a for loop as you do is much more readable than a functional alternative, anyway, down here I show you a functional version:



:

def code_metric(file_name):
    with open(file_name) as f:
        lines = f.read().splitlines()
    char_count = sum(map(len,(map(str.strip,filter(None,lines)))))
    return len(filter(None,lines)), char_count

Code Snippets

def code_metric(file_name):
    with open(file_name) as f:
        lines = f.read().splitlines()
    char_count = sum(map(len,(map(str.strip,filter(None,lines)))))
    return len(filter(None,lines)), char_count

Context

StackExchange Code Review Q#79946, answer score: 2

Revisions (0)

No revisions yet.