lxml write funktioniert nicht mit pathlib
Verfasst: Mittwoch 10. April 2019, 09:30
Hallo liebe Forumsmitglieder,
ich habe ein Problem mit pathlib und dem schreiben einer .xml Datei über einen durch pathlib erzeugten Pfad.
"erzeuge_xml_ospath" erstellt einen Pfad für die .xml wie folgt:
C:/Users/user/daten/12345.xml
Die Funktion läuft durch und erzeugt die Datei am richtigen Ort.
"erzeuge_xml_pathlib" erstellt einen Pfad für die .xml wie folgt:
C:\Users\user\daten\12345.xml
Die Fuktion bricht ab und bringt folgende Fehlermeldung:
TypeError: File or filename expected, got 'WindowsPath'
Noch kurz eine Frage zur lxml write Klasse. Welche ist besser zu verwenden, oder sind beide Schreibweisen ok?
ich habe ein Problem mit pathlib und dem schreiben einer .xml Datei über einen durch pathlib erzeugten Pfad.
Code: Alles auswählen
import os
from pathlib import Path
from lxml import etree
import csv
datenverzeichnis = Path.cwd() / "daten"
original_datei = "original.txt"
original_datei_pfad = datenverzeichnis / original_datei
def erzeuge_xml_ospath(original_datei_pfad):
xml_dateiname = "12345.xml"
os_pfad = os.path.join(os.path.dirname(__file__)) + "/daten/" + xml_dateiname
with open(original_datei_pfad, "r", encoding="utf-8") as import_datei:
eingabe = csv.reader(import_datei, delimiter="\t")
next(eingabe)
root = etree.Element("root")
name = etree.SubElement(root, "Name")
etree.SubElement(name, "ID").text = "ID"
et = etree.ElementTree(root)
et.write(os_pfad, xml_declaration=True, encoding='UTF-8', pretty_print=True)
def erzeuge_xml_pathlib(original_datei_pfad, datenverzeichnis):
xml_dateiname = "12345.xml"
pathlib_pfad = datenverzeichnis / xml_dateiname
with open(original_datei_pfad, "r", encoding="utf-8") as import_datei:
eingabe = csv.reader(import_datei, delimiter="\t")
next(eingabe)
root = etree.Element("root")
name = etree.SubElement(root, "Name")
etree.SubElement(name, "ID").text = "ID"
tree = root.getroottree()
tree.write(pathlib_pfad, xml_declaration=True, encoding='UTF-8', pretty_print=True)
erzeuge_xml_ospath(original_datei_pfad)
erzeuge_xml_pathlib(original_datei_pfad, datenverzeichnis)
C:/Users/user/daten/12345.xml
Die Funktion läuft durch und erzeugt die Datei am richtigen Ort.
"erzeuge_xml_pathlib" erstellt einen Pfad für die .xml wie folgt:
C:\Users\user\daten\12345.xml
Die Fuktion bricht ab und bringt folgende Fehlermeldung:
TypeError: File or filename expected, got 'WindowsPath'
Noch kurz eine Frage zur lxml write Klasse. Welche ist besser zu verwenden, oder sind beide Schreibweisen ok?
Code: Alles auswählen
et = etree.ElementTree(root)
et.write(os_pfad, xml_declaration=True, encoding='UTF-8', pretty_print=True)
# oder
tree = root.getroottree()
tree.write(pathlib_pfad, xml_declaration=True, encoding='UTF-8', pretty_print=True)