2013-02-26 94 views
9

मैं फ़ाइल में होने वाले शब्दों की गिनती ढूंढने की कोशिश कर रहा हूं।पायथन - फ़ाइल में शब्द की घटना

ashwin programmer india 
amith programmer india 

परिणाम मैं उम्मीद है:

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

कोड मैं का उपयोग कर रहा है:

for line in open(TEST.txt,'r'): 
    word = Counter(line.split()) 
    print word 
मैं एक पाठ फ़ाइल ( TEST.txt) फ़ाइल की सामग्री के रूप में निम्नानुसार है

परिणाम मुझे मिलता है:

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

क्या कोई मेरी मदद कर सकता है? अग्रिम में धन्यवाद ।

उत्तर

16

उपयोग काउंटर की update विधि। उदाहरण:

from collections import Counter 

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

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

आउटपुट:

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

+1 बस जो मैं पोस्ट करने जा रहा था - यह विशेष 'काउंटर.अपडेट' विधि का अच्छा उपयोग करता है और पूरे फ़ाइल को स्मृति में पढ़ने की आवश्यकता नहीं है ... –

1

आप हर पंक्ति पर फिर से चल रहे हैं और काउंटर को हर बार कॉल कर रहे हैं। आप काउंटर को पूरी फाइल पर चलाने के लिए चाहते हैं। प्रयास करें:

from collections import Counter 

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

यह अभी भी लाइन द्वारा फ़ाइल लाइन पर कार्रवाई करने के बजाय बेहतर हो सकता है ... – jadkik94

+0

@ jadkik94 यदि वह उस ब्लॉक के भीतर हर पंक्ति को किसी भी तरह से संसाधित कर रहा है, तो इससे कोई फर्क क्यों पड़ता है? – Anorov

+2

@Anorov क्या होता है यदि आपके पास 50 जीबी फ़ाइल है जिसे आप गिनना चाहते हैं? (था बस इतना ही होता है कि केवल 3 अद्वितीय शब्द होते हैं) .... –

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

धन्यवाद, मुझे यह काम कर रहा है – Ashwin

1

एक 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))