Ошибка при вызове функции счетчика в списке - PullRequest
0 голосов
/ 07 февраля 2019

Я пишу программу для подсчета 20 самых встречающихся слов в текстовом файле.Программа работает нормально, когда у меня есть один файл и считается один файл, но когда я ввожу два файла, которые будут удалены и подсчитаны, я получаю сообщение об ошибке «Объект« Счетчик »не может быть вызван».Я в замешательстве, потому что снова это работает нормально с одним документом.Ниже приведен мой код, и ошибка поступает из цикла while.Спасибо!

 from collections import Counter

 numOfData = int(input("How many documents would you liek to scan? "))

 i = 0
 displayedI = str(i)

docList = []
finalData = []

##Address of document would take 'test.txt' for example
while i < numOfData:
    newAddress = input("Address of document " + displayedI + ": ")
    docList.append(newAddress)

    i += 1

 print(docList)
 indexList = 0


 for x in docList:
     file = open(docList[indexList], 'r')
     data_set = file.read().strip()
     file.close()
     split_set = data_set.split()
 ##This is where the error is occurring
     Counter = Counter(split_set)
     most_occuring = Counter.most_common(20)
     finalData.append(most_occuring)
     indexList += 1


print(finalData)

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Причина, по которой он работает для одного документа, заключается в том, что переменная Counter, изначально ссылающаяся на класс collections.Counter, не используется в качестве конструктора после того, как ей был присвоен экземпляр Counter в первой итерации цикла.Только когда цикл находится на второй итерации, переменная Counter, теперь содержащая экземпляр Counter, используется как конструктор Counter, вызывая его, вызывая ошибку.

0 голосов
/ 07 февраля 2019

Я не уверен, почему он работает на 1 элементе, однако вы можете попытаться изменить имя переменной, потому что Counter - это имя, вызываемое объектом.

Также добавьте некоторые "лучше"Практикуйтесь в своем индексе.

for idx, x in enumerate(docList):
    file = open(docList[idx], 'r')
    data_set = file.read().strip()
    file.close()
    split_set = data_set.split()
    CounterVariable = Counter(split_set)
    most_occuring = CounterVariable.most_common(20)
    finalData.append(most_occuring)
...