I am a beginner python programmer and I am trying to make a program which counts the numbers of letters in a text file. Here is what I've got so far:
import string
text = open('text.txt')
letters = string.ascii_lowercase
for i in text:
text_lower = i.lower()
text_nospace = text_lower.replace(" ", "")
text_nopunctuation = text_nospace.strip(string.punctuation)
for a in letters:
if a in text_nopunctuation:
num = text_nopunctuation.count(a)
print(a, num)
If the text file contains hello bob
, I want the output to be:
b 2
e 1
h 1
l 2
o 2
My problem is that it doesn't work properly when the text file contains more than one line of text or has punctuation.
This is very readable way to accomplish what you want using Counter:
from string import ascii_lowercase
from collections import Counter
with open('text.txt') as f:
print Counter(letter for line in f
for letter in line.lower()
if letter in ascii_lowercase)
You can iterate the resulting dict to print it in the format that you want.
You have to use collections.Counter
from collections import Counter
text = 'aaaaabbbbbccccc'
c = Counter(text)
print c
It prints:
Counter({'a': 5, 'c': 5, 'b': 5})
Your text
variable should be:
import string
text = open('text.txt').read()
# Filter all characters that are not letters.
text = filter(lambda x: x in string.letters, text.lower())
For getting the output you need:
for letter, repetitions in c.iteritems():
print letter, repetitions
In my example it prints:
a 5
c 5
b 5
For more information Counters doc
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With