2016-10-30 2 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 - Не указывайте 'get_country' внутри цикла for. 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") 
Смежные вопросы