lxml erfindet scheinbar zeichen Oo
Verfasst: Freitag 4. Mai 2012, 10:37
Hi,
Ich habe folgendes Script:
Das ganze macht was es soll für 90% der files. Bei manchen jedoch sind im output plötzlich Zeichen (Ö) die im input an der Stelle nicht da sind.
Es scheint so als parst er das file schon so ein, also print(etree.tostring(fileasxml)) enthält dieses Zeichen auch schon.
Auszug aus xml:
input:
output:
Jemand ne Idee ?
Ist vermutlich ein encoding Problem, aber da sollten doch auch keine Zeichen auftauchen Oo
Danke im Vorraus!
Ich habe folgendes Script:
Code: Alles auswählen
# -*- coding: utf-8 -*-
'''
Created on 11.04.2012
@author: SzaboP
'''
import os
import MySQLdb
import traceback
from lxml import etree
def connect():
mysql_opts = {
'host': "xxx",
'user': "xxx",
'pass': "xxx",
'db': "xxx"
}
mysql = MySQLdb.connect(mysql_opts['host'], mysql_opts['user'], mysql_opts['pass'], mysql_opts['db'])
return mysql
def mainArtikel(folder, targetpath):
try:
#Variablen die wir brauchen
dbconnection = connect()
cursor = dbconnection.cursor()
parser = etree.XMLParser(recover=True, resolve_entities=False)
for dirpath, dirname, filenames in os.walk(folder):
try:
for file in filenames:
#print(file)
filepath = os.path.join(dirpath, file)
filetargetpath = os.path.join(targetpath + "%s" %file)
#Hole entsprechende Autoren aus der DB
cursor.execute("Select output FROM documents WHERE filename='%s'" % file)
authorstring = cursor.fetchone()
if not(authorstring):
continue
#print("Da hol ich doch was...")
fileasxml = etree.parse(filepath, parser)
print(etree.tostring(fileasxml))
#Wir muessen hier ersetzen und was zum Trennen einbauen, sonst kommt etree damit nicht klar.
authorstring = authorstring[0].replace(">", ">;")
elements = []
for authorstr in authorstring.split(";"):
try:
dbauthorelement = etree.XML(authorstr.strip())
elements.append(dbauthorelement)
except:
continue
#Loesche evtl. vorhandene meta_autor - Tags
for elems in fileasxml.xpath("//meta_autor"):
elems.getparent().remove(elems)
for elem in elements:
authornew = etree.Element("meta_autor")
vorname = etree.SubElement(authornew, "vorname")
vorname.text = elem.get("fn")
nachname = etree.SubElement(authornew, "nachname")
nachname.text = elem.get("ln")
authornew.set("rolle", "autor")
fileasxml.xpath("//meta")[0].append(authornew)
fileasxml.write(filetargetpath, xml_declaration=True, encoding="UTF-8")
except:
print(traceback.format_exc())
except:
print(traceback.format_exc())
Es scheint so als parst er das file schon so ein, also print(etree.tostring(fileasxml)) enthält dieses Zeichen auch schon.
Auszug aus xml:
input:
Code: Alles auswählen
<bibliographie>
<zeitschrift alternativ="ÖBl-LS">ÖBl</zeitschrift>
<jahrgang>2002</jahrgang>
<ausgabe datumstyp="offiziell" erscheinungsdatum="01.03.2002" art="Heft">2</ausgabe>
<seite-von>63</seite-von>
<seite-bis>63</seite-bis>
<artikel-nr>32</artikel-nr>
<autor>Helmut Gamerith</autor>
<verknuepfung-mit-urteil akz-senat="4" akz-lfd-nummer="261" datum="13.11.2001" akz-jahr="01"
gericht="OGH" akz-registerzeichen="Ob"/>
</bibliographie>
Code: Alles auswählen
<bibliographie>
Ö<zeitschrift alternativ="Bl-LS">ÖBl</zeitschrift>
<jahrgang>2002</jahrgang>
<ausgabe datumstyp="offiziell" erscheinungsdatum="01.03.2002" art="Heft">2</ausgabe>
<seite-von>63</seite-von>
<seite-bis>63</seite-bis>
<artikel-nr>32</artikel-nr>
<autor>Helmut Gamerith</autor>
<verknuepfung-mit-urteil akz-senat="4" akz-lfd-nummer="261" datum="13.11.2001" akz-jahr="01" gericht="OGH" akz-registerzeichen="Ob"/>
</bibliographie>
Ist vermutlich ein encoding Problem, aber da sollten doch auch keine Zeichen auftauchen Oo
Danke im Vorraus!