2011-10-25 50 views
2

我写了一个GUI,允许日语输入,当你去文件>解析写入文本文件。然后该文本文件通过MeCab运行,在这两个词之间插入空格。之后,它应该再次写入文本文件,因此它可以显示在另一个GUI窗口中。Python 2.7 - 如何将MeCab解析的信息写入文本文件?

我遇到的问题是它不想将解析的数据写入文本文件。第一次写它没有问题。此外,它将解析的信息打印到IDLE也没有问题。下面是语法分析器和错误:

#!/usr/bin/python 
# -*- coding: <utf-8> -*- 
import sys 

import MeCab 
import codecs 

read_from = open("pholder.txt").read() 
mecab = MeCab.Tagger("-Owakati") 
output = mecab.parse(read_from) 
print output 


text = output 
write_to = codecs.open("pholder.txt", "w", "utf-8") 
write_to.write(text) 
write_to.close() 

Traceback (most recent call last): 
    File "C:\...\mecabSpaces.py", line 16, in <module> 
    write_to.write(text) 
    File "C:\...\codecs.py", line 691, in write 
    return self.writer.write(data) 
    File "C:\...\codecs.py", line 351, in write 
    data, consumed = self.encode(object, self.errors) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) 
+0

'mecab.parse()'返回什么?如在,如果你在命令提示符下键入'mecab.parse(read_from)',你会得到什么? –

+0

解析函数解析Tagger函数告诉它解析的方式。这就是我的理解。 – jeffberhow

+0

对不起,我不知道如何评论分页符。这将是一个单行解析,它将用空格分隔测试:print MeCab.Tagger(' - Owakati')。parse('testtesttest') – jeffberhow

回答

4

解析的数据是不是Unicode,它是一个字节的字符串。

所以,当您尝试将数据写入文件,它会尝试解码它为Unicode之前编码utf-8。由于您的默认编解码器为ascii,但您实际上有utf-8,因此它会扼制字节值为128或更高的第一个字符。

您应该.decode('utf-8')返回的数据,否则使用mecab方法返回unicode数据。

+0

哇,我没有那么想。我一直在搞这么多编解码器和编码解码,我没有想到它只是一个字符串。那么,我刚刚摆脱了所有的编码喧闹,并将write()函数附加到前一个打开函数的末尾,而没有任何编码和blam。有用。 非常感谢! – jeffberhow

+0

啊,绝对会做。我在这里还是新手,所以我正在学习绳索。 :) – jeffberhow

0

这里是工作代码。感谢agf帮助我将我的头从我的屁股中拔出。

#!/usr/bin/python 
# -*- coding: <utf-8> -*- 
import MeCab 

read_from = open("pholder.txt", "r").read() 
mecab = MeCab.Tagger("-Owakati") 
output = mecab.parse(read_from) 
print output 

text = output 
write_to = open("pholder.txt", "w").write(text) 
相关问题