Python — поиск слова в строке, подсчет, добавление

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

Я ищу своего рода метод поиска. Я бы хотел, чтобы скрипт Python искал текстовый файл по ключевому слову и подсчитывал, сколько строк оно появляется. Хотя, если ключевое слово появляется в одной строке несколько раз, я бы все равно хотел подсчитать его только один раз.

Короче говоря; Если клавиатура подходит к одной строке, я хочу, чтобы она считала эту строку и добавляла ее к математическому уравнению.

Любая помощь приветствуется! Заранее спасибо.


person Dustin    schedule 13.11.2011    source источник
comment
С какой частью этой проблемы вы застряли?   -  person Johnsyweb    schedule 13.11.2011


Ответы (4)


Вы можете определить следующую функцию.

def lcount(keyword, fname):
    with open(fname, 'r') as fin:
        return sum([1 for line in fin if keyword in line])

Теперь, если вы хотите узнать количество строк, содержащих «int» в «foo.cpp», вы делаете:

print lcount('int', 'foo.cpp')

Альтернатива, которую вы можете сделать в командной строке (если вы используете соответствующую платформу):

grep int foo.cpp | wc -l
person David Alber    schedule 13.11.2011
comment
Идеальный! Я знал, что не за горами. Вы были большим подспорьем. Спасибо. :) - person Dustin; 13.11.2011
comment
Вы можете сделать строку grep еще более лаконичной, например grep -c int foo.cpp - person DDay; 07.10.2020

Решение Unix, отличное от Python, довольно быстрое:

  • "поиск в текстовом файле по ключевому слову" - это grep
  • "подсчитать количество строк" - это туалет

У вас есть трудности с реализацией сути любого из них в Python?

person dyoo    schedule 13.11.2011
comment
Я думал об этом, но, к сожалению, я работаю в системе Windows и не знал, есть ли ей альтернативы. Кроме того, я стараюсь, чтобы это было как можно ближе к «Только Python». Спасибо хоть! - person Dustin; 13.11.2011

Предполагая, что f является файловым объектом,

lines = f.readlines()
print len([line for line in lines if keyword in line])
person shivram.ss    schedule 13.11.2011

Возможно, вы могли бы попробовать это:

def kwdCount(textContent, keyword):
    lines=textContent.split("\n")
    count=len([1 for line in lines if line.find(keyword)!=-1])
    return count

>>> yourTextFile="hello world\n some words here\n goodbye world"
>>> kwdCount(ourTextFile,"world")
    2
person c-ram    schedule 13.11.2011