2016-03-16 2 views
1

Так что я пытаюсь сделать эту проблемуподсчет букв в текстовом файле в питоне

Написать программу, которая считывает файл с именем text.txt и печатает следующее в экрана:

 количество символов в этом файле

; • количество букв в этом файле

 число заглавных букв в этом файле

 Количество гласных в этом файле

Я получил это до сих пор, но я застрял на шаге 2, это то, что я получил до сих пор.

file = open('text.txt', 'r') 
lineC = 0 
chC = 0 
lowC = 0 
vowC = 0 
capsC = 0 
for line in file: 
    for ch in line: 
     words = line.split() 
     lineC += 1 
     chC += len(ch) 
for letters in file: 
     for ch in line: 
print("Charcter Count = " + str(chC)) 
print("Letter Count = " + str(num)) 
+0

Связанный: http://stackoverflow.com/questions/18647707/count-letters-in-a-text-file – Ramrod

ответ

2

В приведенном выше ответе используются регулярные выражения, которые очень полезны и заслуживают изучения, если вы их раньше не использовали. Код Бунджи также более эффективен, поскольку циклическое перемещение символов в строке в Python относительно медленное.

Однако, если вы хотите попробовать сделать это, используя только Python, посмотрите на код ниже. Несколько моментов: во-первых, оберните свой open() в операторе using, который будет автоматически вызывать close() по файлу, когда вы закончите. Затем обратите внимание, что Python позволяет использовать ключевое слово in во всех интересных направлениях. Все, что является последовательностью, может быть «in-ed», включая строки. Вы можете заменить все строки string.xxx своей собственной строкой, если хотите.

import string 

chars = [] 

with open("notes.txt", "r") as f: 
    for c in f.read(): 
     chars.append(c) 


num_chars = len(chars) 

num_upper = 0; 
num_vowels = 0; 
num_letters = 0 

vowels = "aeiouAEIOU" 
for c in chars: 
    if c in vowels: 
     num_vowels += 1 
    if c in string.ascii_uppercase: 
     num_upper += 1 
    if c in string.ascii_letters: 
     num_letters += 1 

print(num_chars) 
print(num_letters) 
print(num_upper) 
print(num_vowels) 
+0

Спасибо за добавление более быстрый вариант. Я понимаю, что мой пример может быть довольно медленным для больших файлов. Если бы вы захотели сделать это еще быстрее, вы могли бы объединить ваши петли в одну, чтобы вы могли проверить, является ли символ гласным, буквой и т. Д., Когда вы добавляете список символов. Таким образом, вам нужно только пройти через нее. – bunji

+1

@bunji Ваш код быстрее, чем у меня. Извините, если я не объяснил это в своем ответе. RegEx проверяет строки быстрее, чем циклы на большинстве языков, особенно Python. Я не использовал их в своем ответе, потому что, исходя из вопроса, кажется, что OP новичок в Python и, возможно, в программировании, а RegExps довольно разные (на самом деле есть собственный субязык). Я действительно не начал их использовать до тех пор, пока мне не понравилось кодирование. – BrianHVB

+0

Ок, круто, увидев одного Брайана, я получил его по большей части. Я очень новичок в python и все еще пытаюсь запомнить/нарисовать материал. В классе я не думаю, что мы использовали «chars.append (c)», но я очень ценю помощь от вас обоих. Также есть ли другой способ получить заглавные буквы или я всегда использую «string.ascii»? – David

3

Вы можете сделать это, используя регулярные выражения. Найдите все вхождения вашего шаблона в качестве своего списка, а затем найдите длину этого списка.

import re 
with open('text.txt') as f: 
    text = f.read() 
    characters = len(re.findall('\S', text)) 
    letters = len(re.findall('[A-Za-z]', text)) 
    uppercase = len(re.findall('[A-Z]', text)) 
    vowels = len(re.findall('[AEIOUYaeiouy]', text)) 
Смежные вопросы