Search code examples
pythonpython-2.7batch-filecountwords

counting characters and lines from a file python 2.7


I'm writing a program that counts all lines, words and characters from a file given as input.

import string

def main():
    print "Program determines the number of lines, words and chars in a file."
    file_name = raw_input("What is the file name to analyze? ")

    in_file = open(file_name, 'r')
    data = in_file.read()

    words = string.split(data)

    chars = 0
    lines = 0
    for i in words:
        chars = chars + len(i)

    print chars, len(words)


main()

To some extent, the code is ok.

I don't know however how to count 'spaces' in the file. My character counter counts only letters, spaces are excluded.
Plus I'm drawing a blank when it comes to counting lines.


Solution

  • You can just use len(data) for the character length.

    You can split data by lines using the .splitlines() method, and length of that result is the number of lines.

    But, a better approach would be to read the file line by line:

    chars = words = lines = 0
    with open(file_name, 'r') as in_file:
        for line in in_file:
            lines += 1
            words += len(line.split())
            chars += len(line)
    

    Now the program will work even if the file is very large; it won't hold more than one line at a time in memory (plus a small buffer that python keeps to make the for line in in_file: loop a little faster).