एक फ़ाइल में सबसे अधिक अवसर नाम खोजने की कोशिश कर रहा है

मेरे पास 4 टेक्स्ट फाइलें हैं जिन्हें मैं शीर्ष 5 सबसे अधिक नामों को पढ़ना और ढूंढना चाहता हूं। पाठ फ़ाइलों के नाम निम्नलिखित प्रारूप में हैं "रasmस, एम, 11"। नीचे मेरा कोड है जो अभी सभी टेक्स्ट फ़ाइलों को कॉल करने में सक्षम है और फिर उन्हें पढ़ता है। अभी, यह कोड फाइलों के सभी नाम प्रिंट करता है।

def top_male_names ():
    for x in range (2008, 2012):
        txt = "yob" + str(x) + ".txt"
        file_handle = open(txt, "r", encoding="utf-8") 

        file_handle.seek(0)

        line = file_handle.readline().strip()

        while line != "":
            print (line)
            line = file_handle.readline().strip()

top_male_names()

मेरा सवाल यह है कि, मैं इन सभी नामों का ट्रैक कैसे रख सकता हूं, और सबसे ऊपर आने वाले शीर्ष 5 को कैसे ढूंढ सकता हूं? एकमात्र तरीका जिसे मैं सोच सकता था, प्रत्येक नाम के लिए एक चर बना रहा था, लेकिन यह काम नहीं करेगा क्योंकि प्रत्येक पाठ फ़ाइल में 100 प्रविष्टियां हैं, शायद 100 अलग-अलग नामों के साथ।

0
काउंटर के लिए +1, docs.python.org/2/library/ देखें collections.html # काउंटर-ऑब्जेक्ट्स जिसमें आपके द्वारा किए जाने वाले प्रयासों के समान लगभग एक उदाहरण है।
जोड़ा लेखक jonrsharpe, स्रोत
मानक पुस्तकालय में संग्रह। काउंटर में देखें।
जोड़ा लेखक geoffspear, स्रोत
file_handle.seek (0) की कोई आवश्यकता नहीं है। बिना डर ​​के उस रेखा को हटा दें।
जोड़ा लेखक Roberto Bonvallet, स्रोत

2 उत्तर

यदि आपको किसी टेक्स्ट में कई शब्द गिनने की आवश्यकता है, तो regex का उपयोग करें।

उदाहरण के लिए

import re

my_string = "Wow! Is this true? Really!?!? This is crazy!"

words = re.findall(r'\w+', my_string) #This finds words in the document

आउटपुट ::

>>> words
['Wow', 'Is', 'this', 'true', 'Really', 'This', 'is', 'crazy']

"है" और "है" दो अलग-अलग शब्द हैं। तो हम सिर्फ सभी शब्दों को पूंजीकृत कर सकते हैं, और फिर उन्हें गिन सकते हैं।

from collections import Counter

cap_words = [word.upper() for word in words] #capitalizes all the words

word_counts = Counter(cap_words) #counts the number each time a word appears

आउटपुट:

>>> word_counts
Counter({'THIS': 2, 'IS': 2, 'CRAZY': 1, 'WOW': 1, 'TRUE': 1, 'REALLY': 1})

अब एक फाइल पढ़ रहा है:

import re
from collections import Counter

with open('file.txt') as f: text = f.read()

words = re.findall(r'\w+', text )

cap_words = [word.upper() for word in words]

word_counts = Counter(cap_words)

फिर आपको केवल शब्दों को शामिल करने वाले नियमों को क्रमबद्ध करना होगा, मानों के लिए मानों के लिए नहीं और शीर्ष 5 शब्द देखें।

0
जोड़ा

यह इसका सारांश है:

from collections import Counter

counter = Counter()

for line in file_handle:
    name, gender, age = line.split(',')
    counter[name] += 1

print counter.most_common()

आप इसे अपने कार्यक्रम में अनुकूलित कर सकते हैं।

0
जोड़ा