我有一个文本文件,其中包含一些波斯语文本,我想阅读该文件并计算出每个单词出现的次数,然后打印计算出的值。这是我的代码:
f = open('C:/python programs/hafez.txt')
wordDict ={}
for line in f:
wordList = line.strip().split(' ')
for word in wordList:
if word not in wordDict:
wordDict[word] = 1
else: wordDict[word] = wordDict[word]+1
print((str(wordDict)))
它产生的结果有错误的编码格式,我尝试了各种方法来解决这个问题,但没有好的结果!以下是此代码生成的部分文本:
{"\x00'\x063\x06(\x06": 3, "\x00,\x06'\x06E\x06G\x06": 16, "\x00'\x063\x06*\x06E\x06'\x069\x06": 1, '\x00-\x064\x061\x06': 1, .....}
一般来说,您可以用UTF-8编码txt文件,并在py文件的开始部分用#--coding:UTF-8-在py文件中读取UTF-8。在
有几种方法可以解决这个问题,但最简单的方法可能是
codecs.open()
。(我假设您使用Python2.7来实现Counter
和with
的一些其他技巧)。在在Python3中,您需要带有
print
的括号(在Python3中它是一个函数,但在Python2中是一个语句),并且您不需要导入codecs
,因为内置的open()
支持不同的编码。在如果您的编码不是代码页720,那么您需要将该选项替换为相应编码的缩写。在
这是一个学习编码的好机会。虽然我同意Joel,that no programmer should pretend that we live in a US English / ASCII world,但是当你经常处理一个非拉丁字母时,编码的问题就变得特别相关了。(除此之外,ASCII对英语来说甚至还不够——许多英语单词是借用来保持重音的,还有其他问题。)好的起点是Joel的文章(The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!))、Pragmatic Unicode(包括Unicode sandwich),以及为了便于在python2中生成said sandwich,^{} 模块。Python文档中还有一个HOWTO,在阅读了其他文章之后,它更容易理解。在
如果您决定使用完整的python3,那么您可以从文档页面顶部的列表框中简单地选择您的确切版本。BDFL的summary of the differences between Python 2 and 3还包含一些关于Unicode和how it's handled differently in Python 2 and 3问题的信息。在
考虑使用pythonCounter子类来计算单词的出现次数。在
至于文本,python2.7默认情况下不是unicode。阅读:http://docs.python.org/2/howto/unicode.html
你可以用
相关问题 更多 >
编程相关推荐