Python错误:'tuple'对象没有属性'upper'

时间:2015-05-17 09:10:36

标签: python

我想要计算字数并列出字数计算的次数。但是

 f = open("Les.Miserable.txt", 'r')

 words = f.read().split()
 words.sort()
 wordCount = ()

 for i in range(len(words)):
     words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
     words[i] = words[i].upper()
     if words[i] not in wordCount:
         wordCount[words[i]] = 1 
     else:
         wordCount[words[i]] += 1

我可以看到错误消息'tuple'对象在

中没有属性'upper'
words[i] = words[i].upper()

这里

并且错误消息'tuple'对象不支持

中的项目分配

wordCountint [words [i]] = 1

请让我知道问题是什么

3 个答案:

答案 0 :(得分:1)

如果您在尝试更换字符后打印words[i]的值,则会看到它设置为tuple,例如

('word', (',', ''), ('/', ''), ('?', ''), ('!', ''))

因此,试图删除不需要的标点符号的行实际上会创建一个元组,因为这是逗号分隔的项目,即

words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")

实际上是由words[i].replace(".", "")后跟(",", "")等组成的元组。

您可能想要将大量替换操作链接在一起,但这需要看起来像这样:

words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")

但这非常难看,而且仅限于几个标点符号。 str.translate()更好:

words[i] = words[i].translate(None, '.,/?!')

或者,如果您想摆脱所有标点符号,可以使用string.punctuation

import string
words[i] = words[i].translate(None, string.punctuation)

或者,如果您使用的是Python 3:

import string
words[i] = words[i].({ord(c):None for c in string.punctuation})

您的代码中还有其他问题,但请查看您是否可以先解决第一个问题。

答案 1 :(得分:0)

在这一行:

words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")

您将元组分配到words[i]。 我想你想要替换几个角色并且你想要这样做:

words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")

它们之间用逗号表示的几个值是元组。 1,5,6(1,5,6)相同 所以
 words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
与。相同  (words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", ""))

另外,你不能分配到元组中。这条线

wordCount[words[i]] = 1 

可以抛出异常,你需要将wordCountint更改为dict(当你创建它时):

wordCount = {}

答案 2 :(得分:0)

words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")

上面的代码使words成为一个元组。并且您无法在元组上执行upper()之类的操作。因此,错误。 我想,你想做的是

words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")

此外,您已将wordCount = ()声明为元组。由于这个原因,您将无法编辑wordCount,这将导致错误。它应该是字典:wordCount = {}

整个程序应如下所示:

f = open("Les.Miserable.txt", 'r')

words = f.read().split()
words.sort()
wordCount = {}

for i in range(len(words)):
    words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")
    words[i] = words[i].upper()
    if words[i] not in wordCount:
        wordCount[words[i]] = 1
    else:
        wordCount[words[i]] += 1
sorted_wordCount = sorted(wordCount.items(), key=operator.itemgetter(1), reverse=True)
print sorted_wordCount