2015-05-03 4 views
1

У меня есть текстовый файл, который я хочу подсчитывать слово «шарлатан» вколичество слов в текстовом файле

Textfile под названием «quacker.txt». Пример:

Это текстовый файл шарлатан. О, и как шарлатан сделал шарлатана делать в своих экзаменах еще в 2009 году? \ П Ну, он прошел с девятью P классов и один B. \ П Он говорит, что шарлатан он хочет поступить в университет в \ n в будущем, но решил попробовать сделать карьеру на YouTube до этого Quack .... \ n Итак, далеко, все будет очень quack well Quack !!!!

Итак, здесь я хочу 7 как выход.

readf= open("quacker.txt", "r") 
lst= [] 
for x in readf: 
    lst.append(str(x).rstrip('\n')) 
readf.close() 
#above gives a list of each row. 
cv=0 
for i in lst: 
    if "quack" in i.strip(): 
    cv+=1 

выше работает только для одного «шарлатан» в элементе списка

+1

- это данные на одной строке или в разных строках? –

ответ

1

вы увеличивающимся на единицу, если строка содержит строку, но что, если линия имеет несколько вхождений «шарлатан» ?

попробовать:

for line in lst: 
    for word in line.split(): 
     if 'quack' in word: 
      cv+=1 
2

Ну, если файл не слишком долго, вы можете попробовать:

with open('quacker.txt') as f: 
    text = f.read().lower() # make it all lowercase so the count works below 
    quacks = text.count('quack') 

Как @PadraicCunningham упоминалось в комментариях, это также будет подсчитывать «шарлатан» в словах , таких как «quacks» или «quacking». Но если это не проблема, тогда все в порядке.

+0

это также будет считаться шарлатанами и т. Д. И пропустить Quack –

+0

@PadraicCunningham Правда, я обратил внимание на это в ответе, если это проблема – Totem

+0

well plus1 в любом случае, в простом случае это будет работать, что-то более продвинутое потребуется немного больше работы. –

1

Вам нужно опустить, полосу и разделить, чтобы получить точное количество:

from string import punctuation 
with open("test.txt") as f: 
    quacks = sum(word.lower().strip(punctuation) == "quack" 
        for line in f for word in line.split()) 
    print(quacks) 
7 

Вам нужно разделить каждое слово в файл на отдельные слова, или вы получите ложные срабатывания с помощью или сосчитать. word.lower().strip(punctuation) опускает каждое слово и удаляет любые знаки препинания, сумма будет суммировать все время word.lower().strip(punctuation) == "quack" - это правда.

В собственном коде x уже строка поэтому вызов str(x)... ненужно, вы также можете просто проверить каждую строку в первый раз вы итерацию, нет необходимости добавлять строки в список, а затем перебирать во второй раз. Почему вы получаете только один возврат, больше всего нравится, потому что все данные находятся на одной строке, вы также сравниваете quack с Quack, который не будет работать, вам нужно опустить строку.

Смежные вопросы