Jetzt meine Frage: Gibt es irgendwelche anfängertauglichen Methoden, die ganzen Wiederholungen zusammenzufassen?
Der Quelltext (pocoo hat nur Fehlermedlungen gegeben und ich weiß nicht, was man in dem Fall machen kann, deshalb hier):
Code: Alles auswählen
# -*- coding: cp1252 -*-
""" Dokputzer
entfernt überflüssige Formatierungsanweisungen aus von MSWord erzeugten html-Dokumenten"""
import re
# Datei einlesen
Datei = open("Testdatei.html", "r")
Textblock = Datei.read()
Datei.close()
# doppelte Leerzeichen reduzieren
Textblock = Textblock.replace(' ', ' ')
# Umwandeln der deutschen Sonderzeichen
Textblock = Textblock.replace('ä', 'ä')
Textblock = Textblock.replace('Ä', 'Ä')
Textblock = Textblock.replace('ö', 'ö')
Textblock = Textblock.replace('ö', 'Ö')
Textblock = Textblock.replace('ü', 'ü')
Textblock = Textblock.replace('Ü', 'Ü')
Textblock = Textblock.replace('ß', 'ß')
# überflüssige Zeichen entfernen
Textblock = Textblock.replace(' ', ' ')
Textblock = Textblock.replace(' ', ' ')
Textblock = Textblock.replace('\n', ' ')
Textblock = Textblock.replace(' ', ' ')
Textblock = Textblock.replace(' >', '>')
# spitze Klammern durch wiederzufindende Markierungen ersetzen
Textblock = Textblock.replace(r'<', '<+++')
Textblock = Textblock.replace(r'>', '---<')
# Text in Liste von Einzelausdrücken umwandeln
Textzeilen = Textblock.split(r'<')
Textspeichern = open('Textsp.html', 'w')
Textspeichern.write(str(Textzeilen))
Textspeichern.close()
# Vorgriff: Beizubehaltende endspan-Anweisungen markieren
for Nummer in range(len(Textzeilen)):
if Nummer > 285:
if '/span' in Textzeilen[Nummer]:
for Element in Textzeilen[Nummer:Nummer-10:-1]:
if '+++span' in Element:
if ('SGkClassic' in Element or 'RHebrew' in Element
or 'color:red' in Element or 'color:gray' in Element):
Textzeilen[Nummer] = '+' + Textzeilen[Nummer]
break
# Text durcharbeiten
rekonstruierterText = ''
for Zeile in Textzeilen:
Zeilenliste = Zeile.split(r'<')
for Listeneintrag in Zeilenliste:
if (str(Listeneintrag).startswith('+++meta')
or str(Listeneintrag).startswith('+++link') or str(Listeneintrag).startswith('+++o:')
or str(Listeneintrag).startswith('+++w:') or str(Listeneintrag).startswith('+++!')):
Listeneintrag = []
if (str(Listeneintrag).startswith('+++/meta') or str(Listeneintrag).startswith('+++/span')
or str(Listeneintrag).startswith('+++/link') or str(Listeneintrag).startswith('+++/o')
or str(Listeneintrag).startswith('+++/w') or str(Listeneintrag).startswith('+++/!')):
Listeneintrag = []
elif str(Listeneintrag).startswith('++++/span'):
Listeneintrag = [r'</span>']
elif str(Listeneintrag).startswith('+++html'):
Listeneintrag = [r'<html>']
elif str(Listeneintrag).startswith('+++body'):
Listeneintrag = [r'<body>']
elif str(Listeneintrag).startswith('+++p'):
Listeneintrag = [r'<p>']
elif str(Listeneintrag).startswith('+++td'):
Listeneintrag = [r'<td>']
elif str(Listeneintrag).startswith('+++table'):
Listeneintrag = [r'<table border=1>']
elif str(Listeneintrag).startswith('+++span'):
if 'SGkClassic' in Listeneintrag:
Listeneintrag = ["<span style='font-family:SGkClassic'>"]
elif 'RHebrew' in Listeneintrag:
Listeneintrag = ["<span style='font-family:RHebrew'>"]
elif 'color:red' in Listeneintrag:
Listeneintrag = ["<span style='color:red'>"]
elif 'color:gray' in Listeneintrag:
Listeneintrag = ["<span style='color:gray'>"]
else:
Listeneintrag = []
if str(Listeneintrag).startswith('+++'):
Listeneintrag = ['<' + str(Listeneintrag[3:])]
if '---' in str(Listeneintrag):
Listeneintrag = [str(Listeneintrag)[2:-2].replace('---', '>')]
rekonstruierterText = rekonstruierterText + str(Listeneintrag)
# Text bereinigen
rekonstruierterText = rekonstruierterText.replace(r"['", "")
rekonstruierterText = rekonstruierterText.replace(r"[", "")
rekonstruierterText = rekonstruierterText.replace(r"']", "")
rekonstruierterText = rekonstruierterText.replace(r"]", "")
rekonstruierterText = rekonstruierterText.replace('\n', ' ')
rekonstruierterText = rekonstruierterText.replace(r"</p> <p>", r"<br>\n")
rekonstruierterText = rekonstruierterText.replace(r"</p> <p> </span></p> <p>","</p> <p>")
rekonstruierterText = rekonstruierterText.replace('<p>', '\n<p>')
rekonstruierterText = rekonstruierterText.replace('<tr>', '\n<tr>')
rekonstruierterText = rekonstruierterText.replace('<td>', '\n<td>')
rekonstruierterText = rekonstruierterText.replace('>"', '> ')
rekonstruierterText = rekonstruierterText.replace('> "', '> ')
# Datei erstellen
Neufassung = open('Testausgabe.html', 'w')
Neufassung.write(rekonstruierterText)
Neufassung.close()
Ich muß hin und wieder Worddokumente in html umwandeln. Nun ist das von Word automatisch erzeugte html ziemlich haarsträubend. Dieser "Dokputzer" entfernt die meisten überflüssigen Formatierungsanweisungen. Beibehalten werden müssen derzeit nur vier Anweisungen: zwei Schriftarten (Griechisch und Hebräisch) sowie Farbmarkierungen in grau und rot und ein paar grundsätzliche Elemente. Ich bekomme dadurch eine Gößenreduktion der Dateien auf rund 1/5, ohne daß sich am dargestellten Inhalt etwas ändert...