我在Python 3.x中遇到了写入文件的问题,FOR中的写入函数正在用utf-8编码编写捷克符号。 我是Python的新手,但我为' utf-8'设置了IDE和.py,.xml文件。编码,我不知道为什么输出文件看起来像那样。 我的代码:
-*- coding: utf-8 -*-
from lxml import etree
from io import BytesIO
import sys
import codecs
f = open('uzivatelska_prirucka.xml','rb')
fo = open('try.xml','wb',1)
header = '?xml version="1.0" encoding="utf-8"?>\n<root\n'
fo.write(bytes(header,'UTF-8'))
some_file_like_object = f
tree = etree.parse(some_file_like_object)
root = tree.getroot()
node = tree.xpath('/prirucka/body/p');
for a in node:
for b in a.getiterator():
if not (b.find('r') is None):
text = etree.tostring(b.find('r'))
fo.write(bytes(str(text),'UTF-8'))
感谢您的帮助和建议
答案 0 :(得分:1)
是否需要以二进制模式读写?
我认为XML文件是一个简单的文本文件,你可以像txt文件一样使用它
你也应该知道python3.2和更新版本的python在ASCII和UTF字符串之间没有任何区别
python3.2及更高版本将所有字符串视为unicode字符串,因此您可以在输出文件中写入字符串,无论字符串是否包含非ASCII字符
此外,我发现无需以二进制模式打开文件以与lxml.etree
包
尝试以文本模式打开文件(在打开模式下删除b
)并查看它是否有效但请记住告诉open使用utf-8
编码打开文件
f = open('uzivatelska_prirucka.xml', 'r', encoding='utf-8')
fo = open('try.xml', 'w', 1, encoding='utf-8')
作为旁注,你可以写:
if b.find('r'):
而不是:
if not (b.find('r') is None):
因为if子句中的None
假设为False
而find()
返回None
python本身不会运行if块中的代码并跳转它:
$ python3.3
Python 3.3.1 (default, Apr 17 2013, 22:30:32)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(1) if None else print(0)
0
>>> print(1) if not None else print(0)
1
玩得开心;)