numpy.int64' 对象在使用 minidom 写入 xml 文件时没有属性"替换"



我有一个要解析的xml文件。我使用 python 的 minidom 解析器来做到这一点。我必须在解析后向特定元素添加一个属性。现在,我想把文件写回来。我做不到。

下面是我为此获得的错误跟踪。我今天安装了numpy 1.8(win 32 python 2.7)版本。但是,我以前从未尝试过编写xml文件。你能帮忙吗?

下面是代码片段:

xmlfile=open(xmlFile,'r')
xmldoc = minidom.parse(xmlFile)
tElements = xmldoc.getElementsByTagName("TEA")
for t in tElements:
    if(t.childNodes):
        print t.nodeType
        dataList = t.childNodes[0].data
        for data, csvData in product(dataList, clusterDataList):
            if(data == csvData[1]):
              t.setAttribute("cluster",csvData[0])
xmlfile.close()
fileWriter=open("sujatha_new.xml",'w')
xmldoc.writexml(fileWriter)
fileWriter.close()

以下是例外情况:

Traceback (most recent call last):
  File "C:Usersw44ylqrlworkspacePythonTestTXMLConverter.py", line 215, in <module>
    addClusterInfo('..\T\preprocessed_For_Clustering\outputs\sujatha-new.csv', '..\T\xml\sujatha.xml')
  File "C:Usersw44ylqrlworkspacePythonTestTXMLConverter.py", line 48, in addClusterInfo
    xmldoc.writexml(fileWriter)
  File "C:Python27Libxmldomminidom.py", line 1752, in writexml
    node.writexml(writer, indent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:Python27Libxmldomminidom.py", line 807, in writexml
    _write_data(writer, attrs[a_name].value)
  File "C:Python27Libxmldomminidom.py", line 296, in _write_data
    data = data.replace("&", "&amp;").replace("<", "&lt;"). 
AttributeError: 'numpy.int64' object has no attribute 'replace'

没有一个python XML实现允许你序列化非字符串表示,尽管其中一些会允许你分配它们,如果你想滥用etree等作为树状数据结构。有些(如 lxml)甚至不会让你分配它们。只需将其设为字符串:

t.setAttribute("cluster",str(csvData[0]))

它会起作用。如果还要反序列化这些值,则需要在加载后将值转换回 int。

尝试将非字符串类型添加到 DOM 中时发生错误。

最有可能的是,您正在尝试添加

(numpy)整数作为属性名称/值,您正在尝试向元素添加整数内容。

您可以通过将所有整数转换为字符串来解决此问题,使用 str() 函数之类的东西。

这也可能发生在其他类型上,例如numpy.float64,但它绝不仅限于numpy类型,它会影响所有非字符串类型。

相关内容

  • 没有找到相关文章

最新更新