1

我在 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'))

感谢您的帮助和建议

4

1 回答 1

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):  

因为None在 if 子句中假设False和 iffind()返回Nonepython 本身不运行 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

玩得开心编码;)

于 2013-09-02T22:48:49.277 回答