2016-05-15 2 views
0

Ich versuche, eine Funktion, index() zu schreiben, die den Namen einer Textdatei und eine Liste von Wörter. Für jedes Wort in der Liste findet die Funktion die Zeilen in der Textdatei, in der das Wort vorkommt, und druckt die entsprechenden Zeilennummern (wobei die Nummerierung bei 1 beginnt).Drucken Sie die Zeilennummer einer Textdatei für jedes Wort aus einer Liste in Python 3, ohne etwas zu importieren

Beispiel:

index('sawyer.txt',['hello','cloud','cherry','tree']) 

hello 824,965 
cloud 583, 16403 
cherry 345, 561, 7891 
tree 11, 45, 651 

ich bereits Funktion haben, die die Gesamtmenge der Zeilen in einer Textdatei zählt. Aber wie würde ich jede Zeilennummer für jedes Wort in der Liste drucken?

def file_len(): 
with open('sawyer.txt') as f: 
    for i, l in enumerate(f): 
     pass 
return i + 1 

Jede Hilfe würde sehr geschätzt werden.

+0

warum können Sie nicht alles importieren? wie sagen 're'? –

+0

Aus irgendeinem Grund hasst mein Lehrer es. –

Antwort

2

können Sie folgenden Code verwenden, nur das zu tun,

>>> dict={} 
>>> with open('sawyer.txt') as f: 
...  for i, l in enumerate(f): 
...    for word in l.strip().split(" "): 
...      if word in dict.keys():dict[word].append(i) 
...      else:dict[word]=[i] 
... 
>>> dict 

Die komplette Funktion für Ihren Fall sein wird, wie folgt:

def word_locator(file, list_of_words): 
    dict={} 
    with open(file) as f: 
     for i, l in enumerate(f): 
      for word in l.split(" "): 
       if word in list_of_words: 
        if word in dict.keys():dict[word].append(i) 
        else:dict[word]=[i] 
    return dict 


word_location_dictionary = word_locator('sawyer.txt', ['hello','cloud','cherry','tree']) 

for k, v in word_location_dictionary.items(): 
    lines = map(str, v) 
    print k + " " + ' '.join(lines) 
+0

Danke, dass du mir geholfen hast. Ich habe versucht, die Funktion auszuführen, aber ich bekomme AttributeError: 'dict' Objekt hat kein Attribut 'iteritems' –

+0

Ich nehme an, Sie verwenden Python 3. Verwenden Sie dict.items() anstelle von iteritems – wtpoo

+0

Ich habe die Antwort aktualisiert – wtpoo

Verwandte Themen