2010-01-19 6 views
1
from xml.dom.minidom import parse, parseString 

datasource = open('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml') 
dom = parse(datasource) 

print dom 

... le code ci-dessus génère un IOError: 2, 'No such file or directory'. Python ne lit pas le document distant comme PHP? Qu'est-ce que j'ai besoin de changer dans le code pour le faire lire le fichier XML?Ouverture de documents distants en Python

Merci

Répondre

4

En utilisant urllib2.urlopen():

>>> import urllib2 
>>> from xml.dom.minidom import parse, parseString 
>>> u1=urllib2.urlopen('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml') 
>>> dom=parse(u1) 
>>> print dom 
<xml.dom.minidom.Document instance at 0x017D73A0> 
>>> dom.childNodes 
[<DOM Element: gesmes:Envelope at 0x17d7c88>] 
>>> dom.childNodes[0].childNodes 
[<DOM Text node "u'\n\t'">, <DOM Element: gesmes:subject at 0x1041aa8>, 
<DOM Text node "u'\n\t'">, <DOM Element: gesmes:Sender at 0xff8260>, 
<DOM Text node "u'\n\t'">, <DOM Element: Cube at 0x17d3dc8>, <DOM Text node "u'\n'">] 
>>> 

Cette XML utilise une balise Cube pour trop de constructions, donc la sélection des devises est un peu grisant.

>>> [elem.attributes['currency'].value for elem in 
    dom.getElementsByTagName('Cube') if elem.hasAttribute('currency')] 
[u'USD', u'JPY', u'BGN', u'CZK', u'DKK', u'EEK', u'GBP', u'HUF', u'LTL', u'LVL', 
u'PLN', u'RON', u'SEK', u'CHF', u'NOK', u'HRK', u'RUB', u'TRY', u'AUD', u'BRL', 
u'CAD', u'CNY', u'HKD', u'IDR', u'INR', u'KRW', u'MXN', u'MYR', u'NZD', u'PHP', 
u'SGD', u'THB', u'ZAR'] 
>>> 
+0

Merci pour la compréhension de la liste, ont beaucoup aidé! – 3zzy

0

Utilisez urllib.urlopen().

+1

urllib2.urlopen() fait la même chose que je crois, mais il est également compatible avec l'avant v3.0 – Roman

1

open est utilisé pour ouvrir un fichier sur un système de fichiers local. Il ne peut pas ouvrir les URL. Vous devez utiliser urllib.urlopen qui renvoie un fichier comme objet qui prend en charge un sous-ensemble de l'API.

0
import urllib.request 
    from xml.dom import minidom 

    response = urllib.request.urlopen('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml') 
    results = response.read() 

    #print(results)  


    xmldoc = minidom.parseString(results) 
    itemlist = xmldoc.getElementsByTagName('Cube') 
    # if itemlist[1].hasAttribute('time'): 
    #  print("Yes it has") 
    # for s in itemlist[2].attributes.values(): 
    #  print(s.value)  
    #  print(itemlist[2].attributes.values()) 

    for s in itemlist: 
     if s.hasAttribute('currency'): 
      print(s.attributes['currency'].value + ' ' + s.attributes['rate'].value) 
     else: 
      pass 
+0

Veuillez également expliquer le code. Il est préférable que le PO puisse comprendre le concept, et qu'il ne se contente pas de copier/coller du contenu, car c'est plus éducatif. – lpapp

Questions connexes