Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
cp949编解码器可以';python中的t编码字符错误_Python - Fatal编程技术网

cp949编解码器可以';python中的t编码字符错误

cp949编解码器可以';python中的t编码字符错误,python,Python,我使用下面的代码将XML格式的wikipedia培训数据解析为纯文本文件: from __future__ import print_function import logging import os.path import six import sys from gensim.corpora import WikiCorpus if __name__ == '__main__': program = os.path.basename(sys.argv[0]) logger

我使用下面的代码将XML格式的wikipedia培训数据解析为纯文本文件:

from __future__ import print_function

import logging
import os.path
import six
import sys

from gensim.corpora import WikiCorpus

if __name__ == '__main__':
    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)

    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    # check and process input arguments
    if len(sys.argv) != 3:
        print("Using: python process_wiki.py enwiki.xxx.xml.bz2 wiki.en.text")
        sys.exit(1)
    inp, outp = sys.argv[1:3]
    space = " "
    i = 0

    output = open(outp, 'w')
    wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        if six.PY3:
            output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '\n')
        #   ###another method###
        #    output.write(
        #            space.join(map(lambda x:x.decode("utf-8"), text)) + '\n')
        else:
            output.write(space.join(text) + "\n")
        i = i + 1
        if (i % 10000 == 0):
            logger.info("Saved " + str(i) + " articles")

    output.close()
    logger.info("Finished Saved " + str(i) + " articles")
运行此代码时,会显示以下错误消息:

File "wiki_parser.py", line 42, in <module>
    output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '\n')
UnicodeEncodeError: 'cp949' codec can't encode character '\u1f00' in position 1537: illegal multibyte sequence
文件“wiki_parser.py”,第42行,在
输出.写入(字节(''.join(text),'utf-8')。解码('utf-8')+'\n'))
UnicodeEncodeError:“cp949”编解码器无法对1537位置的字符“\u1f00”进行编码:非法的多字节序列
当我在线搜索这个错误时,大多数答案告诉我添加“utf-8”作为已经存在的编码。代码可能有什么问题

最小示例 问题是您的文件是用隐式编码打开的(从系统推断)。我可以按如下方式重新创建您的问题:

a = '\u1f00'
with open('f.txt', 'w', encoding='cp949') as f:
    f.write(a)
错误消息:
UnicodeEncodeError:'cp949'编解码器无法对位置0中的字符'\u1f00'进行编码:非法的多字节序列

你有两个选择。使用可以对正在使用的字符进行编码的编码打开文件:

with open('f.txt', 'w', encoding='utf-8') as f:
    f.write(a)
或者以二进制形式打开文件并写入编码字节:

with open('f.txt', 'wb') as f:
    f.write(a.encode('utf-8'))
应用于您的代码: 我将替换此部分:

output = open(outp, 'w')
wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
for text in wiki.get_texts():
    if six.PY3:
        output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '\n')
    #   ###another method###
    #    output.write(
    #            space.join(map(lambda x:x.decode("utf-8"), text)) + '\n')
    else:
        output.write(space.join(text) + "\n")
为此:

from io import open

wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
with open(outp, 'w', encoding='utf=8') as output:
    for text in wiki.get_texts():
        output.write(u' '.join(text) + u'\n')
在Python 2和Python 3中都可以使用。

最简单的示例 问题是您的文件是用隐式编码打开的(从系统推断)。我可以按如下方式重新创建您的问题:

a = '\u1f00'
with open('f.txt', 'w', encoding='cp949') as f:
    f.write(a)
错误消息:
UnicodeEncodeError:'cp949'编解码器无法对位置0中的字符'\u1f00'进行编码:非法的多字节序列

你有两个选择。使用可以对正在使用的字符进行编码的编码打开文件:

with open('f.txt', 'w', encoding='utf-8') as f:
    f.write(a)
或者以二进制形式打开文件并写入编码字节:

with open('f.txt', 'wb') as f:
    f.write(a.encode('utf-8'))
应用于您的代码: 我将替换此部分:

output = open(outp, 'w')
wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
for text in wiki.get_texts():
    if six.PY3:
        output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '\n')
    #   ###another method###
    #    output.write(
    #            space.join(map(lambda x:x.decode("utf-8"), text)) + '\n')
    else:
        output.write(space.join(text) + "\n")
为此:

from io import open

wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
with open(outp, 'w', encoding='utf=8') as output:
    for text in wiki.get_texts():
        output.write(u' '.join(text) + u'\n')

在Python 2和Python 3中都可以使用。

非常感谢。我想它正在工作,但我不得不等待,因为文件太大了。我会带着结果回来的!它不会打印任何“logger.info”(“Saved”+str(i)+“articles”)”行。“这是否意味着有问题?”DWN17您可能忘记将这些行缩进一级。因此,它应该进入Wiki中的文本<代码> > GETXTrimeScript():这是for循环吗?@ DWNN17考虑如果它对您有所帮助,请接受答案。非常感谢。我想它正在工作,但我不得不等待,因为文件太大了。我会带着结果回来的!它不会打印任何“logger.info”(“Saved”+str(i)+“articles”)”行。“这是否意味着有问题?”DWN17您可能忘记将这些行缩进一级。因此,它应该进入Wiki中的文本<代码> > GETXTrimeScript():这是for循环吗?@ DWNN17考虑如果它对您有所帮助,请接受答案。