gpt4 book ai didi

python - XML 到 CSV 格式

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:51 25 4
gpt4 key购买 nike

我有一个程序可以将 csv 转换为 xml 再转换为 csv。但是,当我将其转换回 csv 时,格式出现错误。原来的csv文件是这样的:

x1    y1    z1    x2    y2    z2    cost
1 2 3 4 5 6 7

等等。该数据也使用 Excel 表示。然后我将其转换为 xml,如下所示:

<Solution version="1.0">
<DrillHoles total_holes="238">
<description>
<hole hole_id="1">
<collar>1, 2, 3</collar>
<toe>4, 5, 6</toe>
<cost>7</cost>
</hole>

*注意这只是整个事情的一部分,但对于这个例子来说已经足够了。所以当我将其转换回 csv 格式时,它看起来像这样:

 x1    y1     z1    x2    y2    z2    cost
123 456 7

其中 x1y1z1x2y2z2cost 在 Excel 中混杂在一列中。这也在 Excel 中表示。

这是我生成 xml 的代码:

def generate_xml(reader,outfile):
root = Element('Solution')
root.set('version','1.0')
tree = ElementTree(root)
head = SubElement(root, 'DrillHoles')
description = SubElement(head,'description')
current_group = None
i = 1
for row in reader.next():
x1,y1,z1,x2,y2,z2,cost = row
if current_group is None or i != current_group.text:
current_group = SubElement(description, 'hole',{'hole_id':"%s"%i})

collar = SubElement(current_group,'collar')
toe = SubElement(current_group,'toe')
cost1 = SubElement(current_group,'cost')
collar.text = ', '.join((x1,y1,z1))
toe.text = ', '.join((x2,y2,z2))
cost1.text = cost
i+=1
head.set('total_holes', '%s'%i)
indent.indent(root)
tree.write(outfile)

生成 csv: defgenerate_csv(根,输出文件): 以 open(outfile, 'w') 作为 file_:

        writer = csv.writer(file_, delimiter="\t")
writer.writerow(['x1'] + ['y1'] + ['z1'] + ['x2'] + ['y2'] + ['z2'] + ['cost'])
for a in zip(root.findall("DrillHoles/description/hole/collar"),
root.findall("DrillHoles/description/hole/toe"),
root.findall("DrillHoles/description/hole/cost")):
writer.writerow([x.text for x in a])

请帮忙谢谢编辑:我想我可能需要多个分隔符,但我不知道如何将其合并到这个程序中。

最佳答案

看来您缺少拆分,该拆分与生成 xml 时所做的 join((x1,y1,z1)) 对称。像这样的事情:

for a in zip(root.findall("DrillHoles/description/hole/collar"),
root.findall("DrillHoles/description/hole/toe"),
root.findall("DrillHoles/description/hole/cost")):
collars, toes, cost = a
collars = [x.strip() for x in collars.text.split(',')]
toes = [x.strip() for x in toes.text.split(',')]
cost = [cost.text]
writer.writerow(collars + toes + cost)

关于python - XML 到 CSV 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com