如何从文本文件中读取非英语语言的文本并用python打印它?

2024-09-30 02:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其中包含一些波斯语文本,我想阅读该文件并计算出每个单词出现的次数,然后打印计算出的值。这是我的代码:

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, .....}


Tags: 文件in文本forline单词次数word
3条回答

一般来说,您可以用UTF-8编码txt文件,并在py文件的开始部分用#--coding:UTF-8-在py文件中读取UTF-8。在

有几种方法可以解决这个问题,但最简单的方法可能是codecs.open()。(我假设您使用Python2.7来实现Counterwith的一些其他技巧)。在

import codecs
from collections import Counter
wordDict = Counter()

with codecs.open('C:/python programs/hafez.txt','r',encoding='cp720') as f:
    for line in f:
        wordDict.update(line.strip().split())

for word, count in wordDict.most_common(): 
    print word, count

在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

你可以用

for i,j in wordDict.iteritems():
    print unicode(i),j

相关问题 更多 >

    热门问题