ich bin gerade dabei python zu lernen.. mach ich aus spaß an der freud und wegen meinem praktikum..
und hier gehts auch direkt zu meinem problem..
ich bastel hier mit xml-dateien rum .. leider werden die einfach nur stumpfsinnig exportiert was zur folge hat das einige tags nicht html konform sind
bsp.:
<para>...</para> anstatt von <p>...</p>
<para class="heading1">...</para> anstatt von <p><b>...</b></p>
also hab ich mir gedacht ich schreib mir nen kleinen datei parser.
zuerst wird in einem verzeichnis sowie in allen unterverzeichnissen nach xml dateien gesucht.. funktioniert auch wunderbar.. diese dateien werden dann nacheinander an den filter übergeben.
der filter öffnet dann die datei und verarbeitet diese zeilenweise
und schreibt das dann eben in eine neue datei.
funktioniert eigentlich wunderbar...
für
<para>
</para>
das problem ist bei dem complexeren ausdruck
wenn ich zuerst <para> und </para> verarbeite verbaue ich mir natürlich die möglichkeit den bould-tag von der überschrift zu beenden
also hab ich mir gedacht.. suchst du erst nach der überschrift und taushct das aus.. und dann behandelst du die restlichen para-tags
suchen tu ich die ausdrücke folgendermaßen
Code: Alles auswählen
'.*?'
will ich das aber austauschen:
Code: Alles auswählen
expr = re.sub ('', '', expr)
code = "%(expr)s" % vars()
text = re.sub (zu_ersetzen, code, text)
Code: Alles auswählen
Traceback (most recent call last):
File "<pyshell#10>", line 1, in -toplevel-
convert()
File "H:\My Projects\python\filereader_v13.py", line 27, in convert
findfiles(pfad, '.xml')
File "H:\My Projects\python\filereader_v13.py", line 22, in findfiles
filter1(datei, newdat)
File "H:\My Projects\python\filter.py", line 45, in filter1
line = re.sub (zu_ersetzen, code, line)
File "C:\Python24\lib\sre.py", line 142, in sub
return _compile(pattern, 0).sub(repl, string, count)
File "C:\Python24\lib\sre.py", line 227, in _compile
raise error, v # invalid expression
error: unbalanced parenthesis
also hab ich versucht dieses problem zu umgehen indem ich die datei zeilenweise einlese..
leider bricht das ganze genau an der selben stelle ab
so.. hier noch die verschiedenen filtervarianten die ich probiert habe:
Code: Alles auswählen
def filter3(infile, outfile):
out = open(outfile, 'w')
for line in open(infile):
re.sub('(.+?)', r'\1', line)
re.sub('(.*?)', r'', line)
out.write(line)
out.close()
def filter2(text):
while 1:
ort = re.search ('.*?', text)
if ort == None:
break
zu_ersetzen = ort.group()
expr = re.sub ('', '', expr)
code = "%(expr)s" % vars()
text = re.sub (zu_ersetzen, code, text)
return text
def filter1(infile, outfile):
out = open(outfile, 'w')
for line in open(infile):
while 1:
ort = re.search ('.*?', line)
if ort == None:
break
zu_ersetzen = ort.group()
expr = re.sub ('', '', expr)
code = "%(expr)s" % vars()
line = re.sub (zu_ersetzen, code, line)
out.write(line)
out.close()
greetz
slide