Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7-如何将MeCab解析的信息写入文本文件?_Python_Parsing_Unicode_Mecab - Fatal编程技术网

Python2.7-如何将MeCab解析的信息写入文本文件?

Python2.7-如何将MeCab解析的信息写入文本文件?,python,parsing,unicode,mecab,Python,Parsing,Unicode,Mecab,我已经编写了一个GUI,它允许日文输入,当你进入file>parse时,它会写入一个文本文件。然后,该文本文件通过MeCab运行,在MeCab中,单词之间放置空格。之后,应该再次将其写入文本文件,以便在另一个GUI窗口中显示 我遇到的问题是,它不想将解析后的数据写入文本文件。第一次写它没有问题。此外,它也会将解析后的信息打印到IDLE,没有问题。以下是解析器和错误: #!/usr/bin/python # -*- coding: <utf-8> -*- import sys imp

我已经编写了一个GUI,它允许日文输入,当你进入file>parse时,它会写入一个文本文件。然后,该文本文件通过MeCab运行,在MeCab中,单词之间放置空格。之后,应该再次将其写入文本文件,以便在另一个GUI窗口中显示

我遇到的问题是,它不想将解析后的数据写入文本文件。第一次写它没有问题。此外,它也会将解析后的信息打印到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()
#/usr/bin/python
#-*-编码:-*-
导入系统
进口麦卡布
导入编解码器
read_from=open(“pholder.txt”).read()
mecab=mecab.Tagger(“-Owakati”)
输出=mecab.parse(从中读取)
打印输出
文本=输出
write_to=codecs.open(“pholder.txt”、“w”、“utf-8”)
写(文本)
将_写入。关闭()

回溯(最近一次呼叫最后一次):
文件“C:\…\mecabspace.py”,第16行,在
写(文本)
文件“C:\…\codecs.py”,第691行,写入
返回self.writer.write(数据)
文件“C:\…\codecs.py”,第351行,写入
数据,消耗=self.encode(对象,self.errors)
UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0xe4:序号不在范围内(128)

解析的数据不是unicode,而是字节字符串

因此,当您尝试将数据写入文件时,它会尝试先将其解码为unicode,然后再将其编码为
utf-8
。由于您的默认编解码器是
ascii
,但实际上您有
utf-8
,因此它会阻塞字节值为128或以上的第一个字符


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

以下是工作代码。感谢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)
#/usr/bin/python
#-*-编码:-*-
进口麦卡布
read_from=open(“pholder.txt”,“r”).read()
mecab=mecab.Tagger(“-Owakati”)
输出=mecab.parse(从中读取)
打印输出
文本=输出
写入=打开(“pholder.txt”,“w”)。写入(文本)

mecab.parse()具体返回什么?与中一样,如果在命令提示符下键入
mecab.parse(read_from)
,您会得到什么?parse函数解析Tagger函数告诉它如何解析。这就是我的理解。对不起,我不知道如何用分页符来评论。这将是一个按空格分隔测试的单行解析:print MeCab.Tagger('-Owakati').parse('testtesttest')哇,我没想到会这样。我已经弄乱了这么多的编解码器和编解码,我没有想到它只是一个字符串。好吧,我刚刚摆脱了所有的ancoding循环,将write()函数附加到上一个open函数的末尾,没有任何编码和错误。它起作用了。非常感谢!啊,当然可以。我还是新来的,所以我在学习诀窍。:)
#!/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)