2013-02-26 18 views
9

Próbuję znaleźć liczbę słów, które wystąpiły w pliku. Mam plik tekstowy (TEST.txt) zawartość pliku jest następująca:python - znajdź wystąpienie słowa w pliku

ashwin programmer india 
amith programmer india 

Wynik Spodziewam się:

{ 'ashwin':1, 'programmer ':2,'india':2, 'amith ':1} 

Kod używam jest:

for line in open(TEST.txt,'r'): 
    word = Counter(line.split()) 
    print word 

Wynik otrzymuję:

Counter({'ashwin': 1, 'programmer': 1,'india':1}) 
Counter({'amith': 1, 'programmer': 1,'india':1}) 

Czy ktoś może mi pomóc? Z góry dziękuję .

Odpowiedz

16

stosowanie metody Counter update. Przykład:

from collections import Counter 

data = '''\ 
ashwin programmer india 
amith programmer india''' 

c = Counter() 
for line in data.splitlines(): 
    c.update(line.split()) 
print(c) 

wyjściowa:

Counter({'india': 2, 'programmer': 2, 'amith': 1, 'ashwin': 1}) 
+2

+1 To, co miałem zamiar opublikować - to dobrze wykorzystuje specjalistyczną metodę 'Counter.update' i nie wymaga odczytu całego pliku do pamięci ... –

1

Wykonujesz iterację po każdej linii i wywołanie Counter za każdym razem. Chcesz, aby Counter przebiegł cały plik. Spróbuj:

from collections import Counter 

with open("TEST.txt", "r"): 
    contents = f.read().split() 
print Counter(contents) 
+0

To nadal może być lepiej przetworzyć pliku linia po linii, zamiast ... – jadkik94

+0

@ jadkik94 Jeśli on przetwarza każdą linię w tym bloku w jakikolwiek sposób, dlaczego miałoby to coś zmienić? – Anorov

+2

@Anorov Co stanie się, jeśli masz plik o pojemności 50 gb, który chcesz liczyć? (Tak się składa, że ​​mają tylko 3 wyjątkowe słowa) ... –

8
from collections import Counter; 
cnt = Counter(); 

for line in open ('TEST.txt', 'r'): 
    for word in line.split(): 
    cnt [word] += 1 

print cnt 
+1

dziękuję, mam to działa – Ashwin

1

Korzystanie z Defaultdict:

from collections import defaultdict 

def read_file(fname): 

    words_dict = defaultdict(int) 
    fp = open(fname, 'r') 
    lines = fp.readlines() 
    words = [] 

    for line in lines: 
     words += line.split(' ') 

    for word in words: 
     words_dict[word] += 1 

    return words_dict 
0
FILE_NAME = 'file.txt' 

wordCounter = {} 

with open(FILE_NAME,'r') as fh: 
    for line in fh: 
    # Replacing punctuation characters. Making the string to lower. 
    # The split will spit the line into a list. 
    word_list = line.replace(',','').replace('\'','').replace('.','').lower().split() 
    for word in word_list: 
     # Adding the word into the wordCounter dictionary. 
     if word not in wordCounter: 
     wordCounter[word] = 1 
     else: 
     # if the word is already in the dictionary update its count. 
     wordCounter[word] = wordCounter[word] + 1 

print('{:15}{:3}'.format('Word','Count')) 
print('-' * 18) 

# printing the words and its occurrence. 
for (word,occurance) in wordCounter.items(): 
    print('{:15}{:3}'.format(word,occurance)) 
Powiązane problemy