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

fwzugrvs  于 2023-06-29  发布在  其他
关注(0)|答案(2)|浏览(94)

我有一个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:\Users\w44ylqrl\workspace\Python\Test\T\XMLConverter.py", line 215, in <module>
    addClusterInfo('..\\T\\preprocessed_For_Clustering\\outputs\\sujatha-new.csv', '..\\T\\xml\\sujatha.xml')
  File "C:\Users\w44ylqrl\workspace\Python\Test\T\XMLConverter.py", line 48, in addClusterInfo
    xmldoc.writexml(fileWriter)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 1752, in writexml
    node.writexml(writer, indent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 817, in writexml
    node.writexml(writer, indent+addindent, addindent, newl)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 807, in writexml
    _write_data(writer, attrs[a_name].value)
  File "C:\Python27\Lib\xml\dom\minidom.py", line 296, in _write_data
    data = data.replace("&", "&amp;").replace("<", "&lt;"). \
AttributeError: 'numpy.int64' object has no attribute 'replace'
daolsyd0

daolsyd01#

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

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

它会成功的如果您也要反序列化这些值,则需要在加载后将值转换回int。

ibps3vxo

ibps3vxo2#

在DOM中添加非字符串类型时出错

最有可能的情况是,你要么试图添加一个(numpy)整数作为属性名称/值,要么试图向元素添加整数内容。
您可以通过使用类似str()函数的方法将所有整数转换为字符串来解决此问题。
这也可能发生在其他类型,例如numpy.float64也是,但它绝不仅限于numpy类型,它影响所有非字符串类型。

相关问题