Python return 将数据写入文件时出错(Python 2.7)
Python return error while writing data into file(Python 2.7)
我正在用 python mini-Dom module.while 解析 XML 文件,将数据写入文件时出现 Unicode Encode Error: 'ASCII' codec can't encode characters in position 0-3: ordinal not in range(128)
这样的错误。但是在命令行上输出完美打印请告诉我解决方案。
我的 XML 文件是:
<?xml version="1.0"?>
<Feature>
<Word Root ="ਨੌਕਰ-ਚਾਕਰ">
<info Inflection ="ਨੌਕਰਾਂ-ਚਾਕਰਾਂ">
<posinfo gender ="Masculine" number ="Plural" case ="Oblique" />
</info>
</Word>
</Feature>
我的python代码是:
import sys
from xml.dom import minidom
file=open("npu.txt","w+")
doc = minidom.parse("NPU.xml")
word = doc.getElementsByTagName("Word")
for each in word:
# print "root"+each.getAttribute("Root")
file.write(each.getAttribute("Root")+"\n")
hh=each.getElementsByTagName("info")
for each1 in hh:
# print "inflection"+each1.getAttribute("Inflection")
file.write(each1.getAttribute("Inflection")+"\t")
vv=each1.getElementsByTagName("posinfo")
for each2 in vv:
# print each2.getAttribute("gender")
# print each2.getAttribute("number")
# print each2.getAttribute("case")
file.write( each2.getAttribute("gender")+",")
file.write( each2.getAttribute("number")+",")
file.write(each2.getAttribute("case"))
file.write("\n")
file.write("--------\n")
问题不在于您解析 XML 的方式,这是一个编码问题。
错误是由您的文本编码 (UTF-8) 引起的。
您正在尝试将您的文本编写为不包含您正在使用的字符的 ASCII。
尝试使用以下编解码器:
import codecs
file = codecs.open("npu.txt", "w+", "utf-8")
file.write("ਨੌਕਰ-ਚਾਕਰ".decode('utf-8'))
file.close()
编辑:
您也可以将默认编码设置为UTF-8 添加特殊注释
# -*- coding: UTF-8 -*-
在 python 来源的开头。默认编码为 ASCII(7 位)。
请注意,Python 标识符仍仅限于 ASCII 字符。
encode data while writing-
#!/usr/bin/env python
# -*- coding: utf-8 -*-
file=open("npu.txt","w+")
file.write("ਨੌਕਰ-ਚਾਕਰ")
我正在用 python mini-Dom module.while 解析 XML 文件,将数据写入文件时出现 Unicode Encode Error: 'ASCII' codec can't encode characters in position 0-3: ordinal not in range(128)
这样的错误。但是在命令行上输出完美打印请告诉我解决方案。
我的 XML 文件是:
<?xml version="1.0"?>
<Feature>
<Word Root ="ਨੌਕਰ-ਚਾਕਰ">
<info Inflection ="ਨੌਕਰਾਂ-ਚਾਕਰਾਂ">
<posinfo gender ="Masculine" number ="Plural" case ="Oblique" />
</info>
</Word>
</Feature>
我的python代码是:
import sys
from xml.dom import minidom
file=open("npu.txt","w+")
doc = minidom.parse("NPU.xml")
word = doc.getElementsByTagName("Word")
for each in word:
# print "root"+each.getAttribute("Root")
file.write(each.getAttribute("Root")+"\n")
hh=each.getElementsByTagName("info")
for each1 in hh:
# print "inflection"+each1.getAttribute("Inflection")
file.write(each1.getAttribute("Inflection")+"\t")
vv=each1.getElementsByTagName("posinfo")
for each2 in vv:
# print each2.getAttribute("gender")
# print each2.getAttribute("number")
# print each2.getAttribute("case")
file.write( each2.getAttribute("gender")+",")
file.write( each2.getAttribute("number")+",")
file.write(each2.getAttribute("case"))
file.write("\n")
file.write("--------\n")
问题不在于您解析 XML 的方式,这是一个编码问题。
错误是由您的文本编码 (UTF-8) 引起的。 您正在尝试将您的文本编写为不包含您正在使用的字符的 ASCII。
尝试使用以下编解码器:
import codecs
file = codecs.open("npu.txt", "w+", "utf-8")
file.write("ਨੌਕਰ-ਚਾਕਰ".decode('utf-8'))
file.close()
编辑:
您也可以将默认编码设置为UTF-8 添加特殊注释
# -*- coding: UTF-8 -*-
在 python 来源的开头。默认编码为 ASCII(7 位)。
请注意,Python 标识符仍仅限于 ASCII 字符。
encode data while writing-
#!/usr/bin/env python
# -*- coding: utf-8 -*-
file=open("npu.txt","w+")
file.write("ਨੌਕਰ-ਚਾਕਰ")