对于任何用户提供的文本文件,该程序都会读取,分析和写入每个单词以及在输出文件中找到该单词的行号

时间:2019-05-12 02:54:35

标签: python dictionary

对于任何用户给定的文本文件,该程序将读取,分析和写入每个单词以及在输出文件中找到该单词的行号。一个单词可能会出现在多行中。一个单词在一行中显示多次,该行号只会记录一次。 要求用户输入文本文件的名称。使用try / except进行无效的用户输入。然后,程序读取文本文件的内容并创建一个字典,其中的键值对描述如下:

  • 键。关键是在文件中找到的单个单词。
  • 值。每个值都是一个列表,其中包含在文件中找到单词(键)的行号。请注意,列表可能只有一个元素。

一旦建立了字典,程序将创建另一个文本文件,名为“ word_index.txt”。接下来,将字典的内容作为按字母顺序存储在字典中的单词的字母顺序列表(对键进行排序)写到文件中(连同单词在原始文件中出现的行号)。

在下面查看我的代码

import string

fname = input('Enter a file name: ')

try:
    fhand = open(fname)
except:
    print('File cannot be opened:', fname)
    exit()

counts = dict()
L_N=0
for line in fhand:
    line= line.rstrip()
    line = line.translate(line.maketrans(' ', ' ',string.punctuation))
    line = line.lower()
    words = line.split()
    L_N+=1
    for word in words:
        if word not in counts:
            counts[word]= [L_N]
        else:
            if L_N not in counts[word]:
                counts[word].append(L_N) 
for h in range(len(counts)):
    print(counts)

out_file = open('word_index.txt', 'w')
out_file.write('Text file being analyzed is: '+str(fname)+ '\n\n')
out_file.close()

结果应该只打印一次结果,但是我遇到了一次打印多次的问题。

1 个答案:

答案 0 :(得分:0)

由于要在for循环中打印字典,因此它将被打印n次- n是字典的长度-因此,您只需要删除此循环即可:

for h in range(len(counts)):
    print(counts)

并添加以下内容: 在这里,我们只是遍历字典以获取每一对

for key, value in counts.items():
    print('key: ', key, 'value: ', value)