Python在xmlfi中缩小数字

2024-04-26 03:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的点坐标的xml文件

<vertex x="15" y="15.2"/>

我想把这些坐标

<vertex x="15*factor" y="15.2*factor"/>

factor=0.2(一个数字)

我在考虑使用re。比如:

 re.sub(r'(x=\"[0-9]\"', X, X*factor, data)

我不喜欢所有行上都有两个循环,还有split和一个循环。。。你知道吗

因为我把文件读作一个字符串

f = open(filename)
data = f.read()
f.close()

编辑:

更多上下文

<polygon>
    <vertex x="-15" y="15"/>
    <vertex x="-15" y="-15"/>
</polygon>
<polygon>
    <vertex x="15" y="-15"/>
    <vertex x="15" y="15"/>
</polygon>
<polygon>
    <vertex x="-15" y="-15"/>
    <vertex x="15" y="-15"/>
</polygon>

因数=0.1的输出

<polygon>
    <vertex x="-1.5" y="1.5"/>
    <vertex x="-1.5" y="-1.5"/>
</polygon>
<polygon>
    <vertex x="1.5" y="-1.5"/>
    <vertex x="1.5" y="1.5"/>
</polygon>
<polygon>
    <vertex x="-1.5" y="-1.5"/>
    <vertex x="1.5" y="-1.5"/>
</polygon>

有什么想法吗?你知道吗


Tags: 文件字符串reclosereaddata数字xml
2条回答

这里

import xml.etree.ElementTree as ET


xml = '''<r><polygon>
    <vertex x="-15" y="15"/>
    <vertex x="-15" y="-15"/>
</polygon>
<polygon>
    <vertex x="15" y="-15"/>
    <vertex x="15" y="15"/>
</polygon>
<polygon>
    <vertex x="-15" y="-15"/>
    <vertex x="15" y="-15"/>
</polygon></r>'''


def scale(factor):
    root = ET.fromstring(xml)
    vertex_lst = root.findall('.//vertex')
    for vertex in vertex_lst:
        for attr in ['x','y']:
            vertex.attrib[attr] = str(int(vertex.attrib[attr]) * factor)
    ET.dump(root)


scale(0.1)

输出

<r><polygon>
    <vertex x="-1.5" y="1.5" />
    <vertex x="-1.5" y="-1.5" />
</polygon>
<polygon>
    <vertex x="1.5" y="-1.5" />
    <vertex x="1.5" y="1.5" />
</polygon>
<polygon>
    <vertex x="-1.5" y="-1.5" />
    <vertex x="1.5" y="-1.5" />
</polygon></r>

我不太确定这里需要什么样的输出,我猜我们可以从一个类似的表达式开始:

(x=|y=)\"\s*([-]?[0-9]+)\s*\"

测试

import re

regex = r"(x=|y=)\"\s*([-]?[0-9]+)\s*\""

test_str = ("<polygon>\n"
    "    <vertex x=\"-15\" y=\"15\"/>\n"
    "    <vertex x=\"-15\" y=\"-15\"/>\n"
    "</polygon>\n"
    "<polygon>\n"
    "    <vertex x=\"15\" y=\"-15\"/>\n"
    "    <vertex x=\"15\" y=\"15\"/>\n"
    "</polygon>\n"
    "<polygon>\n"
    "    <vertex x=\"-15\" y=\"-15\"/>\n"
    "    <vertex x=\"15\" y=\"-15\"/>\n"
    "</polygon>")

subst = "\\1\"\\2\\*factor\""

result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

在这个demo中,如果您感兴趣的话,将解释表达式。你知道吗

相关问题 更多 >