【发布时间】:2016-05-07 01:51:14
【问题描述】:
所以我试图从 .txt 文件中读取数据,然后找到最常见的 30 个单词并将它们打印出来。但是,每当我阅读我的 txt 文件时,我都会收到错误消息:
"UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 338: ordinal not in range(128)".
这是我的代码:
filename = 'wh_2015_national_security_strategy_obama.txt'
#catches the year of named in the file
year = filename[0:4]
ecount = 30
#opens the file and reads it
file = open(filename,'r').read() #THIS IS WHERE THE ERROR IS
#counts the characters, then counts the lines, replaces the non word characters, slipts the list and changes it all to lower case.
numchar = len(file)
numlines = file.count('\n')
file = file.replace(",","").replace("'s","").replace("-","").replace(")","")
words = file.lower().split()
dictionary = {}
#this is a dictionary of all the words to not count for the most commonly used.
dontcount = {"the", "of", "in", "to", "a", "and", "that", "we", "our", "is", "for", "at", "on", "as", "by", "be", "are", "will","this", "with", "or",
"an", "-", "not", "than", "you", "your", "but","it","a","and", "i", "if","they","these","has","been","about","its","his","no"
"because","when","would","was", "have", "their","all","should","from","most", "were","such","he", "very","which","may","because","--------"
"had", "only", "no", "one", "--------", "any", "had", "other", "those", "us", "while",
"..........", "*", "$", "so", "now","what", "who", "my","can", "who","do","could", "over", "-",
"...............","................", "during","make","************",
"......................................................................", "get", "how", "after",
"..................................................", "...........................", "much", "some",
"through","though","therefore","since","many", "then", "there", "–", "both", "them", "well", "me", "even", "also", "however"}
for w in words:
if not w in dontcount:
if w in dictionary:
dictionary[w] +=1
else:
dictionary[w] = 1
num_words = sum(dictionary[w] for w in dictionary)
#This sorts the dictionary and makes it so that the most popular is at the top.
x = [(dictionary[w],w) for w in dictionary]
x.sort()
x.reverse()
#This prints out the number of characters, line, and words(not including stop words.
print(str(filename))
print('The file has ',numchar,' number of characters.')
print('The file has ',numlines,' number of lines.')
print('The file has ',num_words,' number of words.')
#This provides the stucture for how the most common words should be printed out
i = 1
for count, word in x[:ecount]:
print("{0}, {1}, {2}".format(i,count,word))
i+=1
【问题讨论】:
-
查看我链接到的帖子和Python 3 docs for
open,尤其是它的encoding参数。对于 Python 2,open的“新”版本位于io.open中。 PS:该字节很可能是非标准(Microsoft)右单引号,经常被误用作“卷曲”撇号。 -
以上都不是 - 所有这些问题和答案都涉及 Python 2。没有人会帮助 OP 解决与 Python 3 的 TextIOWrapper 引发异常相关的非常简单的问题,必须通过选择正确的编码来纠正
标签: python character-encoding python-unicode