2016-10-30 107 views
0

Python(和編碼新手)在這裏。我試圖根據目錄中的文件列表生成XML文件。文件名的前兩個字母對應一個新的國家代碼,我也試圖提取這個。使用PYCOUNTRY將ISO 3166-1 alpha-2轉換爲國家名稱

我打算格式如下:

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

我似乎能夠生成XML文件,但我無法兩位數的國家代碼轉換爲使用pycountry的國家。有人能建議一個可能的解決方案嗎?對代碼其餘部分的任何評論也會有所幫助。

# -*- 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 - 好的,我會在外面定義它。我遇到了一個問題,我試圖通過函數來​​定義文本,但它不會讓我。有什麼建議麼? 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") 
相關問題