Word未定义

时间:2015-11-11 00:36:39

标签: python

在这个程序中,我试图将索引写入名为“index.txt”的文本文件,并将其打印出来。但是,每当我运行程序时,我都会收到一条错误,说“单词”没有定义,而我的index.txt文件只打印出单词/ tLine数字。

代码:

from string import punctuation

def makeIndex(filename):
    wordIndex = {}
    with open(filename) as f:
        lineNum = 1
        for line in f:
            words = line.lower().split()
            for word in words:
                for char in punctuation:
                    word = word.replace(char, '')
                if word.isalpha():
                    if word in wordIndex.keys():
                        if lineNum not in wordIndex[word]:
                            wordIndex[word].append(lineNum)
                    else:
                        wordIndex[word] = [lineNum]
                lineNum += 1
    return wordIndex

def output(wordIndex):
    print("Word\tLine Numbers")
    for key in sorted(wordIndex.keys()):
        print(key, '\t', end=" ")
        for lineNum in wordIndex[key]:
            print(lineNum, end=" ")
        print()

def main():
    filename = input("What is the file name to be indexed?")
    index = makeIndex(filename)
    output(index)
    with open('index.txt', 'w') as writefile:
        writefile.write("Word/tLine Numbers")
        print('t', end= "")
        for index in range(len(word)):
            print(word[index])
            writefile.write(word[index] + '/n')


main()

输出:

    What is the file name to be indexed?test.txt
Word    Line Numbers
a    8 12 38 70 78 
all      85 101 
also     91 
an   34 96 
anagrams     93 104 
as   84 
ask      28 
blocks   4 
called   61 
create   69 
different    59 
difficulties     47 
each     74 
employed     65 
figure   32 
file     9 
find     100 
finds    92 
following    22 
for      18 73 
given    37 
has      80 
have     56 
here     66 
in   7 48 
interesting      19 
is   52 67 
it   103 
its      42 87 
jumble   25 
large    3 
letters      43 
long     54 
many     58 
new      14 
of   5 16 41 45 86 102 
one      44 
opens    10 
out      33 
permutations     62 88 
possibilities    17 
problem      51 
program      23 90 
programs     20 
puzzles      26 
range    15 
reorderings      60 
same     82 
scrambled    39 
set      40 
signature    72 83 
since    94 
so   57 76 
solver   30 
solves   24 
solving      49 
strategy     64 
text     6 
that     53 77 
the      21 29 46 63 81 
this     50 89 
to   31 68 
typing   95 
unique   71 
unknown      35 
unscrambled      97 
up   11 
which    27 
whole    13 
will     99 
with     2 
word     36 75 79 98 
words    55 
working      1 
tTraceback (most recent call last):
  File "C:\Users\jp19p_000\Desktop\wordIndex(1).py", line 46, in <module>
    main()
  File "C:\Users\jp19p_000\Desktop\wordIndex(1).py", line 41, in main
    for index in range(len(word)):
NameError: name 'word' is not defined

这是index.txt文件:

Word/tLine Numbers

1 个答案:

答案 0 :(得分:-1)

from collections import defaultdict
import string
import sys

# convert to lowercase, remove all digits and punctuation
trans = str.maketrans(string.ascii_uppercase, string.ascii_lowercase, string.digits + string.punctuation)

def get_unique_words(s, trans=trans):
    return set(s.translate(trans).split())

def make_index(seq, start=1):
    index = defaultdict(list)
    for i,s in enumerate(seq, start):
        for word in get_unique_words(s):
            index[word].append(i)
    return index

def write_index(index, file=sys.stdout):
    print("Word\tLines", file=file)
    for word in sorted(index.keys()):
        lines = " ".join(str(i) for i in index[word])
        print("{}\t{}".format(word, lines), file=file)

def main():
    fname = input("What is the name of the file to be indexed? ")
    with open(fname) as inf:
        index = make_index(inf)
    with open("index.txt", "w") as outf:
        write_index(index, outf)

if __name__=="__main__":
    main()