2014-11-22 6 views
0

Я новичок в Python, но, к моему собственному удивлению, я произвел этот рабочий кусок кода:Подсчет слов из файла в Python

if __name__ == "__main__": 
with open("wordlist.txt") as infile: 
    for line in infile: 
     print(line)  



with open ("cv000_29416.txt", "r") as myfile: 
    data=myfile.read().replace('\n', '') 
print (data.count("bad"))  

Дело в том, что я хочу, чтобы подсчитать слова из wordlist.txt в cv000_29416.txt.

(Так что wordlist.txt содержит, например, двадцать слов, таких как «bad», «good» и т. Д., А cv000_29416.txt - это длинный текст, и я хочу подсчитать, сколько раз «плохо», «хорошо» и т. Д. в cv000_29416.txt)

Могу ли я вставить это где-нибудь в секундах кода?

Спасибо! и извините за плохой английский

ответ

2

использовать collections.Counter Dict, чтобы сосчитать все слова:

from collections import Counter 
with open ("cv000_29416.txt", "r") as myfile: 
    data = Counter(myfile.read().split()) 
print (data["bad"]) 

положить его вместе, предполагая каждое слово на отдельной строке в wordlist.txt:

from collections import Counter 
with open ("cv000_29416.txt", "r") as myfile,open("wordlist.txt") as infile: 
    data = Counter(myfile.read().split()) 
    for line in infile: 
     print(data.get(line.rstrip(),0)) 
+0

Это потенциально освобождает пространство, отслеживая нежелательные слова. В идеале вы должны были бы подсчитать ТОЛЬКО слова в wordlist.txt – inspectorG4dget

+0

@ inspectorG4dget, это должен был быть довольно большой файл, прежде чем он будет иметь какое-либо значение, счетчик-диктор - это именно то, о чем OP должен учиться в противоположность для использования чего-то типа 'print (data.count (« bad »))' –

+0

Предоставлено: 'data.count (« bad »)' is bad (каламбур не предназначен). Тем не менее, OP может поддерживать dict с ТОЛЬКО требуемыми словами и вручную увеличивать счетчик по мере необходимости. Это сэкономит место и будет намного более масштабируемым (для больших/разреженных файлов). Кроме того, поскольку 'collections' написан на python, это будет не так много быстрее, чем написанный вручную код python – inspectorG4dget

3
# create a collection of the words that want to count 
with open('wordlist.txt') as infile: 
    counts = {} 
    for line in infile: 
     for word in line.split(): 
      counts[word] = 0 

# increment the count of the words that you really care about 
with open("cv000_29416.txt") as infile: 
    for line in infile: 
     for word in line.split(): 
      if word in counts: 
       counts[word] += 1 

for word,count in counts.items(): 
    print(word, "appeared", count, "times") 
+0

Спасибо, это именно то, что я искал! –

+0

@HeleenFeijen: просьба рассмотреть возможность маркировки принятого ответа, чтобы указать, что вопрос закрыт – inspectorG4dget

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