我在阅读XML时遇到了问题。我想得到一个2D数组。但是,当我从XML获取数据时,数据类型是Unicode。因此,我键入使用list()。但是,结果不是我想要的。我可以使用其他方式获取2D列表吗?
如何删除u,\ n,\ t并获得正确答案?谢谢。
abc.xml
<text>
<item id="1">
[[2, 2, 1],
[1, 0, 0],
[1, 0, 0]]
</item>
</text>
PYTHON:
import xml.dom.minidom
dom = xml.dom.minidom.parse('abc.xml')
bb = dom.getElementsByTagName('item')
b=bb[0]
l= b.firstChild.data
print l
a=list(l)
print a
OUTPUT:
[[2, 2, 1]
[1, 0, 0]
[1, 0, 0]]
[u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'[', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'2', u',', u' ', u'2', u',', u' ', u'1', u']', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'1', u',', u' ', u'0', u',', u' ', u'0', u']', u' ', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u'\t', u'[', u'1', u',', u' ', u'0', u',', u' ', u'0', u']', u' ', u'\n', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u' ', u'\n', u' ', u' ', u' ', u' ', u'\t', u'\t', u']', u'\n', u' ', u' ', u' ', u' ', u'\t']
[Finished in 0.1s]
答案 0 :(得分:1)
这个问题与旧问题非常相似:Convert string representation of list to list in Python
简而言之,您希望解析一个unicode字符串(u"[\n[1,2,3],\n..."
)到python列表文字中,所以你想做同样的事情python解释器在读取和解析时做的事情程序
您可以使用ast
模块:
import ast
a=ast.literal_eval(l)
在你的情况下。请注意,此函数将评估任何 python文字,因此如果您只是将"1"
放入xml中,则结果a
将为数字1
有关详细说明,请参阅documentation for ast.literal_evel。
答案 1 :(得分:1)
有点hacky但适合你的情况:
import ast
from lxml import html
text = """<text>
<item id="1">
[
[2, 2, 1]
[1, 0, 0]
[1, 0, 0]
]
</item>
</text>"""
tree = html.fromstring(text)
data = ast.literal_eval(''.join([x.strip() for x in tree.xpath('//text/item[@id="1"]/text()')[0].replace('\n', '').replace(']','],').strip() if x.strip() !=""]).strip())[0]
print type(data)
print data
<强>输出:强>
<type 'list'>
[[2, 2, 1], [1, 0, 0], [1, 0, 0]]
答案 2 :(得分:0)
您可以使用映射将unicode转换为字符串:
new_list = map(str, old_list)