Κώδικας:file_name = input("Δώσε το όνομα του αρχείου: ")
file = open(file_name, "r")
emails_count = {}
for line in file:
#Βλέπω εάν η γραμμή μου εμπεριέχει την λέξη From.
if line.startswith("From"):
words = line.split() #Xωρίζω τις λέξεις.
email = words[1] #Πέρνω την δεύτερη λέξη που ειναι το email.
#-----------Αυτο είναι το κομμάτι που δεν ήξερες πως να κάνεις-----------#
#Εάν είναι η πρώτη φορά που βάζω αυτό το email στο
#λεξικό μου, τότε του αναθέτω αρχική τιμή ένα.
if email not in emails_count.keys():
emails_count[ email ] = 1 #Δημιουργώ ένα "κλειδή λεξικού" και του δίνω την τιμή ένα.
#Υπάρχει ήδη το email στο λεξικό μου που σημένει ότι τώρα πρέπει
#να το αυξήσω κατά ένα γιατί το έχω ήδη δει τουλάχιστον μία φορά.
else:
emails_count[ email ] += 1 #Αυξάνω την μέτρηση του συγκεκριμένου email κατά ένα.
#-----------Αυτο είναι το κομμάτι που δεν ήξερες πως να κάνεις-----------#
for key in emails_count.keys():
print("Το email:",key,"εμφανίζεται:",emails_count[key],"φορές.")
Αρχείο.txt που χρησιμοποίησα για τεστάρισμα:From: nbampaliaris@gmail.com
Hello there mate! I sended you this email...
From: nbampaliaris@gmail.com
Hello there again!....
From: petrosIwannidis@yahoo.gr
Mr, i would like to report you.....
From: anastasiaGianoudi@hotmail.com
Hello Nick!......
Πρέπει να ξέρεις ότι το κειδή(key) σε ένα λεξικό είναι το όνομα μιας λέξης μέσα στο
λεξικό σου, ενώ η τιμή(value) είναι η τιμή στην οποία αναφέρεται η λέξη.
Εάν δεν ξέρεις πως λειτουργούν τα λεξικά στην python λογικά δεν θα καταλάβεις τον
κωδικά μου. Εάν δεν ξέρεις μην διστάσεις να το ρωτήσεις
Γενικά όταν δηλώνεις ένα λεξικό counts = dic() ή μπορείς να το δηλώσεις και έτσι counts = {}
για να δημιουργήσεις ένα καινούριο κλειδή και να του δώσεις μια αρχική τιμή κάνεις το εξής:
counts["Όνομα_Κλειδιού"] = τιμή
Τώρα εάν θέλεις να πάρεις την τιμή ενώς κλειδιού από το λεξικό σου κάνεις το εξής:
variable = counts["Όνομα_Κλειδιού"]
Εάν δεν γνωρίζεις το κλειδί, τότε μπορείς να πάρεις μια λίστα κλειδιών χρησιμοποιώντας την
μέθοδο .keys():
KEYS = counts.keys()
for key in KEYS:
print(key)
Επίσης θα σου πω και κάποια λαθάκια που έκανες:
for line in fhand:
1)if not line.startswith('From '):continue
2)words=line.split()
3)emails=words[1] # H prwti lexi, meta to 'From '.
4)for email in emails:
counts[email]=counts.get(email,0)+1
5)print emails
Στην γραμμή 4, εσύ νομίζεις ότι η μεταβλητή emails είναι μια λίστα ενώ δεν είναι.
Στην γραμμή 3 το emails=words[1] θα σου δώσει ένα string το οποίο θα έιναι ένα email και όχι
μια λίστα από emails. Όταν το loop σου ξανατρέξει τότε η μεταβλητή emails θα αντικατασταθεί
με ένα άλλο email το οποίο διαβάστηκε ποιο μετά στο αρχείο.