2015-03-23 4 views
-1

Im пытается подсчитать количество вхождений слова в отдельный файл с запятой, используя python.Подсчитайте определенное слово в файле с помощью

У меня есть файл, который содержит строки, как это:

path/to/app1,app1,fail,[email protected],logfile.log 
path/to/app2,app2,success,[email protected],logfile.log 

Я хочу, чтобы найти, сколько раз «потерпеть неудачу» в файле.

Я попробовал несколько вещей, в том числе

for line in lines: 
    if line.split(',') == "fail": 
     fails += 1 
+2

Если это формат CSV, пожалуйста, используйте модуль CSV: https://docs.python.org/2 /library/csv.html –

ответ

1

Что вы делаете, сравнивая списки (которые являются результатом str.split) в строку fail, что вы хотите сделать, это проверить, если существует в обязательном порядке эти линии:

for line in lines: 
    if "fail" in line.split(','): 
     fails += 1 

Этот код предполагает fail может появиться в самый раз, между запятыми.

правильно способ сделать это с помощью csv module:

import csv 
fails = 0 
with open("logfile.log") as f: 
    reader = csv.reader(f) 
    for row in reader: 
     for item in row: 
      if item == "fail": 
       fails += 1 
print fails 

Вы можете также использовать collections.Counter сосчитать:

import csv 
from collections import Counter 
counter = Counter() 
with open("logfile.log") as f: 
    reader = csv.reader(f) 
    for row in reader: 
     counter.update(row) 
print counter['fail'] 
+0

Не можете ли вы просто прочитать весь файл и подсчитать вхождения? –

+1

Вы могли бы, но что, если у вас есть строка в файле, которая гласит: «Эта штука просто ** терпит неудачу **?»? Вы не должны составлять парсер, когда парсер был создан для вас. Это следует принципу «Не повторяй себя». –

0

Не оптимальное решение, но работает

f = open("C:/Users/Superman/Desktop/krypton.log") 
data = f.read() 
fail_count =0 
no_spaces = data.replace(' ', '') #can use .strip() also to remove spaces 
x = no_spaces.split(',') 

for word in x: 
    if word == 'fail': 
    fail_count += 1 
print (fail_count) 
0

tr у этого:

def specific_word_count(text, specific_word): 
    return len(text.split(specific_word)) - 1 

вход:

specific_word_count('abcdabcdabcd','a') 

выход:

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