OSError: [Errno 36] Dateiname zu lang:

Ich muss eine Webseite in XML umwandeln (mit Python 3.4.3 ). Wenn ich den Inhalt der URL in eine Datei schreibe, dann kann ich sie perfekt lesen und analysieren, aber wenn ich versuche, direkt von der Webseite zu lesen, bekomme ich folgende Fehlermeldung in meinem Terminal:

Datei "./AnimeXML.py", Zeile 22, in xml = ElementTree.parse (xmlData) Datei "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/xml/etree/ElementTree.py" , Zeile 1187, in parse tree.parse (Quelle, Parser) Datei "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/xml/etree/ElementTree.py", Zeile 587, in der Parse-Quelle = Offen (Quelle, "rb") OSError: [Errno 36] Dateiname zu lang:

Mein Python-Code:

 # AnimeXML.py #! /usr/bin/Python # Import xml parser. import xml.etree.ElementTree as ElementTree # XML to parse. sampleUrl = "http://cdn.animenewsnetwork.com/encyclopedia/api.xml?anime=16989" # Read the xml as a file. content = urlopen (sampleUrl) # XML content is stored here to start working on it. xmlData = content.readall().decode('utf-8') # Close the file. content.close() # Start parsing XML. xml = ElementTree.parse (xmlData) # Get root of the XML file. root = xml.getroot() for info in root.iter("info"): print (info.attrib) 

Gibt es irgendeine Art, wie ich meinen Code reparieren kann, damit ich die Webseite direkt in Python lesen kann, ohne diesen Fehler zu bekommen?

One Solution collect form web for “OSError: [Errno 36] Dateiname zu lang:”

Wie im Abschnitt " Parsing XML " der ElementTree Dokumente beschrieben:

Wir können diese Daten durch Lesen aus einer Datei importieren:

 import xml.etree.ElementTree as ET tree = ET.parse('country_data.xml') root = tree.getroot() 

Oder direkt aus einer Saite:

 root = ET.fromstring(country_data_as_string) 

Du gibst den ganzen XML-Inhalt als riesigen Pfadnamen. Ihre XML-Datei ist wahrscheinlich größer als 2K, oder was auch immer die maximale Pfadname Größe für Ihre Plattform ist, daher der Fehler. Wenn es nicht wäre, hättest du nur einen anderen Fehler bekommen, da es kein Verzeichnis namens [everything up to the first / in your XML file] .

Verwenden fromstring einfach fromstring statt fromstring .

Oder bemerken, dass parse ein parse nehmen kann, nicht nur einen Dateinamen. Und die Sache, die von urlopen ist ein urlopen .


Beachten Sie auch die nächste Zeile in diesem Abschnitt:

fromstring() analysiert XML aus einer Zeichenfolge direkt in ein Element , das das Wurzel-Element des geparsten Baums ist. Andere Parsing-Funktionen können eine ElementTree erzeugen.

Also, du willst das auch nicht root = tree.getroot() .


Damit:

 # ... content.close() root = ElementTree.fromstring(xmlData) 
  • Gleichzeitige SAX-Verarbeitung von großen, einfachen XML-Dateien?
  • Parse xml mit lxml - Extrakt Element Wert
  • OpenERP 7 Zugriffsrechte für Benutzerrollen
  • Openerp-Funktionsfelder
  • Python xml.etree.ElementTree Verzeichnis acess
  • Wie gebe ich ein Wörterbuch und nicht eine Liste?
  • Verschieben Sie ein ganzes Element mit lxml.etree
  • GET STIX Daten vom TAXII Server basierend auf Indikatoren (IP und Hash)
  • Wie bekomme ich den vollständigen XML- oder HTML-Inhalt eines Elements mit ElementTree?
  • XPATH - Wie bekomme ich die inneren Textdaten mit den Tags?
  • Python, Oracle DB, XML-Daten in einer Spalte, Abrufen von cx_Oracle.Object
  • Python ist die beste Programmiersprache der Welt.