0

現在、OpenStreetMap XML ドキュメントを使用するプロジェクトに取り組んでいます。プロジェクトの一部は、データの一部とその一貫性を検証することです。私はPythonとXMLファイルの操作にかなり慣れていないため、どこから始めればよいかわかりません。

これが私の XML ドキュメントのスニペットです。

  <way id="11005330" version="2" timestamp="2013-02-05T20:56:45Z" changeset="14926577" uid="451693" user="bot-mode">
<nd ref="98006629"/>
<nd ref="98006630"/>
<nd ref="98006631"/>
<tag k="highway" v="residential"/>
<tag k="name" v="Kiwi Court"/>
<tag k="tiger:cfcc" v="A41"/>
<tag k="tiger:county" v="Lake, FL"/>
<tag k="tiger:name_base" v="Kiwi"/>
<tag k="tiger:name_type" v="Ct"/>
<tag k="tiger:reviewed" v="no"/>
<tag k="tiger:zip_left" v="34714"/>
<tag k="tiger:zip_right" v="34714"/>

私が今やりたいことは、次のものを取ることです:

    <tag k="tiger:name_base" v="Kiwi"/>
    <tag k="tiger:name_type" v="Ct"/>

それらを 1 つの新しいタグに結合します。

<tag k="addr:street" v="Kiwi Ct"/>

もう 1 つのことは、これらすべてが name_base と name_type の両方を持っているわけではないということです。そのため、 addr:street タグを作成したいだけです。

これは非常に大きなファイルなので、1 つずつ調べて作成する必要があります。新しいタグを作成したら、先に進んで要素を削除する必要があります。

私は以下を使用しています:import xml.etree.cElementTree as ET

編集

問題の一部を修正できました

    root = tree.getroot()
    for way in root.findall(".//way"):
        kbool = False
        tbool = False
        for key in way.iterfind(".//tag"):
            if key.attrib['k'] == "tiger:name_base":
                kbool = True
                # print(key.attrib['v'])
                base = key.attrib['v']
            if key.attrib['k'] == "tiger:name_type":
                tbool = True
                ttype = key.attrib['v']
        if kbool == True and tbool == True:
            ET.SubElement(way, 'tag k="addr:street" v="{} {}"'.format(base, ttype))
        elif kbool == True and tbool == False:
            ET.SubElement(way, 'tag k="addr:street" v="{}"'.format(base))


tree.write('maps')

私が今抱えている問題は、tiger:name_base キーを持たない方法でもアドレス属性を書き込んでいることです。

4

1 に答える 1