2016-03-21 9 views
-1

Ich versuche, Python-Code zu schreiben, um eine Datei zu lesen, ein Wörterbuch aus dem Inhalt zu erstellen und dann die Anzahl der wiederholten Wörter zu überprüfen. Der Code ist unten mit Kommentaren zu den einzelnen Schritten:Lesen einer Datei in ein Wörterbuch, um die Anzahl der wiederholten Wörter zu überprüfen

import string 

# making a dictionary from a paragraph 
def make_dict(s): 
    some_list = s.split() 
    d = dict() 
    for word in some_list:    
     d[word] = 1 + d.get(word,0) 
    print d 
    print 
    print 
    return d 

#Inverse the dictionary 
# swap between key and value 

def invert_dict(s): 
    inverse = {} 
    d = make_dict(s) 
    for key in d: 
     val = d[key] 
     if val not in inverse: 
      inverse[val] = [key] 
     else: 
      inverse[val].append(key) 
    print inverse 
    print 
    print 
    return inverse 


# Reading a file and copying just plain text in other file  
def make_text(): 
    file_name = raw_input('Enter file name: ') 
    fn = open(file_name) 
    for line in fn: 
     line = line.translate(None,"!#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~") 
     line = line.lower() 
     some_text = open('duplicate.txt','a') 
     some_text.write(line) 
     # print some_text 
     some_text.close() 
     fn.close() 
     return some_text 


some_file = make_text() 
some_dict = invert_dict(some_file) 
for key in some_dict: 
    print key , some_dict[key] 
    print 

Wenn ich den Code ausführen, ich folgende Fehlermeldung bekam. Kann mir bitte jemand erklären, was ich falsch mache und wie ich den Fehler beheben kann?

Traceback (most recent call last): 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 51, in <module> 
    some_dict = invert_dict(some_file) 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 22, in invert_dict 
    d = make_dict(s) 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 8, in make_dict 
    some_list = s.split() 
AttributeError: 'file' object has no attribute 'split' 

Antwort

0

Ihre make_text Funktion gibt die (geschlossen) Datei Objekt, um es geschrieben hat, nicht eine Zeichenfolge wie Sie zu erwarten scheinen. Vielleicht möchten Sie stattdessen line zurückgeben?

Es ist auch nicht klar, ob Sie überhaupt aus der Schleife zurückkehren möchten, da nur die erste Zeile aus der Datei verarbeitet wird, die der Benutzer für Sie benannt hat. Wenn Sie die ganze Datei anstatt nur einer einzelnen Zeile lesen möchten, würde ich fn.read() aufrufen, anstatt auf fn zu iterieren (dessen Name ist ein bisschen irreführend, da es ein Dateiobjekt ist, nicht nur ein Dateiname). Alternativ könnte es sein, dass make_text eine Generatorfunktion ist, die jede Zeile enthält (dies würde jedoch signifikante Änderungen in Ihrem anderen Code erfordern).

Verwandte Themen