【问题标题】:Python Element Tree Writing to New FilePython元素树写入新文件
【发布时间】:2016-10-09 08:27:26
【问题描述】:

嗨,所以我一直在努力解决这个问题,但无法弄清楚我为什么会出错。试图将一些基本的 XML 导出到一个新文件中,不断给我一个 TypeError。下面是一小段代码

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement
import xml.etree.ElementTree as ET


root = Element('QuoteWerksXML')
tree = ElementTree(root)
ver = SubElement(root, "AppVersionMajor")
ver.text = '5.1'

tree.write(open('person.xml', 'w'))

【问题讨论】:

  • 请发布整个回溯。

标签: python xml tree element writing


【解决方案1】:

ElementTree.write 方法默认为 us-ascii 编码,因此需要打开一个用于写入二进制文件的文件:

输出是字符串 (str) 或二进制 (bytes)。这由 encoding 参数控制。如果encoding"unicode",则输出为字符串;否则,它是二进制的。请注意,如果它是一个打开的文件对象,这可能与 file 的类型冲突;确保不要尝试将字符串写入二进制流,反之亦然。

所以要么以二进制模式打开文件进行写入

with open('person.xml', 'wb') as f:
    tree.write(f)

或以文本模式打开要写入的文件并将"unicode"作为编码

with open('person.xml', 'w') as f:
    tree.write(f, encoding='unicode')

或以二进制模式打开文件进行写入并传递显式编码:

with open('person.xml', 'wb') as f:
    tree.write(f, encoding='utf-8')

【讨论】:

  • 如果写入标准输出,可以使用tree.write(sys.stdout.buffer)
  • 在我的情况下编码不能是“unicode”。我不得不将其更改为“UTF-8”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多