2016-10-30 4 views
0

Python(および初心者コード)はここにあります。私は、ディレクトリ内のファイルのリストに基づいてXMLファイルを生成しようとしています。ファイル名の最初の2文字は新しい文字の国コードに対応しており、これも抽出しようとしています。次のようにPYCOUNTRYを使用して、ISO 3166-1 alpha-2を国名に変換します。

私の意図した形式は次のとおりです。

<ROOT> 
    <BASIC/> 
    <FULL> 
     <INFO> 
      <server>filname</server> 
      <country>country</country> 
      <region/> 
     </INFO> 
    </FULL> 
</ROOT> 

私は、XMLファイルを生成することができるように見えるが、私はpycountryを使用して国に2桁の国コードを変換することができませんでしだ。誰かが可能な解決策を提案できますか?コードの残りの部分についてのコメントも参考になります。

# -*- coding: utf-8 -*- 
import lxml.etree as xml 
import pycountry 
import glob 

import gettext 
gettext.bindtextdomain('iso3166', pycountry.LOCALES_DIR) 
_c = lambda t: gettext.dgettext('iso3166', t) 

def createXML(outfile): 
     root = xml.Element("ROOT") 
     basic = xml.Element("BASIC") 
     full = xml.Element("FULL") 
     root.append(basic) 
     root.append(full) 
# add file information 
     for filename in glob.glob("*.*"): 
       info = xml.Element("INFO") 
       server = xml.SubElement(info, "server") 
       server.text = filename 
       short = filename[:2] 
       country = xml.SubElement(info, "country") 
       def get_country(code): 
        return _c(pycountry.countries.get(alpha2=code).name) 
       country.text = get_country(short) 
       region = xml.SubElement(info, "region") 
       full.append(info) 
     print xml.tostring(root, pretty_print=True) 
#save new XML 
#  tree = xml.ElementTree(root) 
#  with open(filename, "w") as fh: 
#  tree.write(fh) 

#-------------------------------------------------------- 
if __name__ == "__main__": 
    createXML("info.xml") 
+0

1 - forループ内に 'get_country'を定義しないでください。 2 - ファイルは大文字か小文字かで始まっていますか? – gbe

+0

1 - OK、それを外に定義します。私は関数の結果としてテキストを定義しようとするときに問題を抱えていて、それは私に許されません。助言がありますか? 2 - 小文字ですが、可能な限り完成したいと思います。助けてくれてありがとう! – RMcLellan

+0

1について、私はあなたがなぜあなたに「あなたを許さない」と言っているのか、なぜ「テキスト」を参照するのかという意味を理解していません。 – gbe

答えて

0

gbeありがとうございました!それはきれいではありませんが、ここで働くコードはあります。

# -*- coding: utf-8 -*- 
import lxml.etree as xml 
import pycountry 
import glob 

import gettext 
gettext.bindtextdomain('iso3166', pycountry.LOCALES_DIR) 
_c = lambda t: gettext.dgettext('iso3166', t) 

def createXML(outfile): 
     root = xml.Element("ROOT") 
     basic = xml.Element("BASIC") 
     full = xml.Element("FULL") 
     root.append(basic) 
     root.append(full) 
# add file information 
     for filename in glob.glob("*.*"): 
       info = xml.Element("INFO") 
       server = xml.SubElement(info, "server") 
       server.text = filename 
       short = filename[:2].upper() 
       country = xml.SubElement(info, "country") 
       country.text = pycountry.countries.get(alpha2=short).name 
       region = xml.SubElement(info, "region") 
       full.append(info) 
     print xml.tostring(root, pretty_print=True) 
#save new XML 
#  tree = xml.ElementTree(root) 
#  with open(filename, "w") as fh: 
#  tree.write(fh) 

#-------------------------------------------------------- 
if __name__ == "__main__": 
    createXML("info.xml") 
関連する問題