PythonリストをXML要素に変換するために作成したPythonコードがいくつかあります。これはLabVIEWとの対話を目的としているため、奇妙なXML配列形式です。とにかく、ここにコードがあります:
def pack(data):
# create the result element
result = xml.Element("Array")
# report the dimensions
ref = data
while isinstance(ref, list):
xml.SubElement(result, "Dimsize").text = str(len(ref))
ref = ref[0]
# flatten the data
while isinstance(data[0], list):
data = sum(data, [])
# pack the data
for d in data:
result.append(pack_simple(d))
# return the result
return result
次に、パックされたXML配列をPythonリストに戻すためのunpack()メソッドを作成する必要があります。配列の次元とデータをうまく抽出できます。
def unpack(element):
# retrieve the array dimensions and data
lengths = []
data = []
for entry in element:
if entry.text == "Dimsize":
lengths.append(int(entry.text))
else:
data.append(unpack_simple(entry))
# now what?
しかし、アレイを平坦化する方法がわかりません。それを行うための効率的な方法は何でしょうか?
編集:Pythonリストと対応するXMLは次のようになります。注:配列はn次元です。
data = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
そして、XMLバージョン:
<Array>
<Dimsize>2</Dimsize>
<Dimsize>2</Dimsize>
<Dimsize>2</Dimsize>
<I32>
<Name />
<Val>1</Val>
</I32>
... 2, 3, 4, etc.
</Array>
ただし、実際の形式は重要ではありません。リストをフラット化する方法がわかりません。
data = [1, 2, 3, 4, 5, 6, 7, 8]
に戻る:
data = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
与えられた:
lengths = [2, 2, 2]
pack_simple()およびunpack_simple()は、基本的なデータ型(int、long、string、boolean)に対してpack()およびunpack()と同じことを行うと想定します。