2016-10-30 3 views
0

Python (und Kodierung Neuling) hier zu konvertieren. Ich versuche, eine XML-Datei basierend auf einer Liste von Dateien in einem Verzeichnis zu erstellen. Die ersten beiden Buchstaben des Dateinamens entsprechen einem neuen Buchstaben-Ländercode und ich versuche, dies ebenfalls zu extrahieren.Verwenden Sie PYCOUNTRY, um ISO 3166-1 Alpha-2 zu Country Name

Mein beabsichtigtes Format ist wie folgt:

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

Ich scheine die XML-Datei erzeugen zu können, aber ich bin nicht in der Lage des zweistelligen Ländercode in das Land pycountry verwenden zu konvertieren. Könnte jemand bitte eine mögliche Lösung vorschlagen? Alle Kommentare zum Rest des Codes wären ebenfalls hilfreich.

# -*- 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 - Definieren Sie 'get_country' nicht innerhalb Ihrer for-Schleife. 2 - Beginnen die Dateien mit Groß- oder Kleinbuchstaben? – gbe

+0

1 - OK, ich definiere es draußen. Ich habe ein Problem, bei dem ich versuche, den Text als Ergebnis einer Funktion zu definieren, und es lässt mich nicht. Irgendwelche Vorschläge? 2 - Kleinbuchstaben, aber ich möchte so vollständig wie möglich sein. Danke für die Hilfe! – RMcLellan

+0

In Bezug auf 1 verstehe ich nicht, was du meinst, warum du sagst "es wird dich nicht lassen" oder was du meinst, warum du dich auf "den Text" beziehst. – gbe

Antwort

0

Danke an gbe für die Hilfe! Es ist nicht schön, aber hier ist der Code, der funktioniert hat.

# -*- 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") 
Verwandte Themen