Seite 1 von 2
Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 19:26
von Barcellona
Hallo zusammen,
ich versuche gerade über Python verschiedene Textformate einzulesen und würde auch gerne die Word-Formate .doc und .docx einlesen.
Wenn ich ein Word-Dokument im Texteditor öffne, bekomme ich da aber jede Menge "komisches Zeug".
Hat jemand eine Idee, wie ich den Text filtern könnte, so dass ich nur den wirklichen Text einlese?
:K
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 19:31
von Hyperion
".doc"-Dokumente sind eben binär, ".docx" zum Teil auch. "docx" ist durch die ISO wohl zertifiziert, mit dem nötigen Kleingeld kannst Du also die Spezifikation erwerben und einen Parser dafür schreiben. Generell ist das wohl XML basiert, zwischen den Tags gibt es aber wohl teilweise auch binäres Zeugs.
Um es kurz zu machen: Das ganze dürfte außer für Spezialfälle eher kein Unterfangen sein, dass man selber als Einzelperson stemmen kann

Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 19:41
von Barcellona
Danke für die Antwort.
docx und doc kann ich dann also vergessen...
Welche Textformate wären doch noch leicht einzulesen? (außer .txt...)
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 19:46
von cofi
Definiere "einlesen" und was hast du denn vor?
Es gibt jede Menge Text-Formate, die Plaintext sind und man trotzdem nicht einfach einlesen, im Sinne von parsen, oder voneinander unterscheiden kann.
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 20:06
von Barcellona
Ich möchte eine Art Texteditor schreiben, der verschiedene Formate lesen kann.
Bisher lese ich nur .txt-Dateien ein und würde das Ganze gerne erweitern.
Zumindest 1-2 Formate, die auch Infos über kursiv,fettgedruckt, etc. beinhalten.
Hat da wer eine Idee, welches Format ich leicht einlesen könnte.
Sprich unnötige Infos herausfiltern und nur den Text samt wichtigen Informationen speichern.
Output könnte dann sowas in der Art sein:
<b>Dies ist ein Titel<b>
Dies die <i>erste<i> Zeile.
Nur als Idee...
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 20:09
von Hyperion
"Richtext" wäre da evtl. etwas.
Ansonsten eben markdown, creole, ...
Ach ja und ODF eben - das ist ja sogar offen dokumentiert!
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 20:21
von Barcellona
ODF sieht gut für meinen Zweck aus

- danke
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 21:23
von Barcellona
Habe jetzt mal eine .odt-Datei erstellt, aber wenn ich diese mit Scite öffne, bekomme ich wieder nur ein Misch-Masch
aus komischen Zeichen
Wie kann ich denn wohl die .odt-Datei als utf-8-Encoding speichern?
Re: Word-Dokumente einlesen
Verfasst: Montag 30. August 2010, 21:53
von cofi
ODF ist eine gezippte Ordnerstruktur mit XML-Dateien und kein Plaintext.
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 08:58
von /me
cofi hat geschrieben:ODF ist eine gezippte Ordnerstruktur mit XML-Dateien und kein Plaintext.
Man kann damit sogar im Bedarfsfall unter Umgehung einer passenden API für ODF arbeiten. Dabei öffnet man mit dem zipfile-Modul die Datei, liest die content.xml aus, manipuliert diese und schreibt sie wieder zurück. Für einfaches Suchen und Ersetzen funktioniert das problemlos.
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 10:59
von Barcellona
Das hört sich interessant an. Bekomme allerdings den Fehler "File is not a zip file" bei dem Versuch eine odt zu öffnen.
Hast du vielleicht Beispielcode, wie man die Datei öffnet?
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 11:10
von cofi
http://lmgtfy.com/?q=python+open+odf
Wenn du deinen bisherigen Code postest waere das hilfreicher. Ausserdem: Ist die Datei valide, kannst du sie ohne Python entpacken?
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 12:24
von Pekh
Einige Archiv-Programme weigern sich unter Windows, Archive ohne Endung .zip zu entpacken. Lösung: Einfach die Datei von .odt auf .zip umbenennen.
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 15:06
von /me
Barcellona hat geschrieben:Das hört sich interessant an. Bekomme allerdings den Fehler "File is not a zip file" bei dem Versuch eine odt zu öffnen.
Hast du vielleicht Beispielcode, wie man die Datei öffnet?
So könnte Öffnen, Ändern und Schreiben aussehen. Bitte passende Fehlerbehandlung dazudenken.
Code: Alles auswählen
import zipfile
f = zipfile.ZipFile("filename.odt, "a")
f.extract("content.xml")
with open("content.xml") as c:
data = c.read()
data.replace("foo", "bar")
with open("content.xml", "w") as c:
c.write(data)
f.write("content.xml")
f.close()
Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 17:51
von Hyperion
Wobei man da das lxml-Modul nutzen möchte

Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 19:37
von derdon
/me: Syntax Highlighting ist schon praktisch, nicht wahr?

Re: Word-Dokumente einlesen
Verfasst: Dienstag 31. August 2010, 21:39
von /me
Hyperion hat geschrieben:Wobei man da das lxml-Modul nutzen möchte

Ja, natürlich möchte man das. Aber nicht hier im Beispiel.

Re: Word-Dokumente einlesen
Verfasst: Mittwoch 1. September 2010, 09:39
von sma
Re: Word-Dokumente einlesen
Verfasst: Donnerstag 2. September 2010, 10:29
von /me
Du hast natürlich recht. Code zu schreiben ohne zu testen führt gerne zu Syntax- oder Logikfehlern.
Re: Word-Dokumente einlesen
Verfasst: Donnerstag 2. September 2010, 15:42
von Barcellona
Vielen Dank für das Beispiel!
Klappt wunderbar, verstehe nur nicht alles im Code.
Vielleicht kann mir jemand kurz noch erklären, was an den kommentierten Stellen passiert, wäre sehr nett.
Danke!
Code: Alles auswählen
import zipfile
def read_odt(path):
f = zipfile.ZipFile(path, "a") # wieso "a"? a=append, oder?
f.extract("content.xml")
with open("content.xml") as c: # ist content.xml nun ausserhalb des odt-Dokumentes verfügbar? wegen extract?
data = c.read()
data=data.replace("test", "changed")
with open("content.xml", "w") as c:
c.write(data)
f.write("content.xml")
f.close()
read_odt("test.odt")