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
Word-Dokumente einlesen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
".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
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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
Danke für die Antwort.
docx und doc kann ich dann also vergessen...
Welche Textformate wären doch noch leicht einzulesen? (außer .txt...)
docx und doc kann ich dann also vergessen...
Welche Textformate wären doch noch leicht einzulesen? (außer .txt...)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.
Es gibt jede Menge Text-Formate, die Plaintext sind und man trotzdem nicht einfach einlesen, im Sinne von parsen, oder voneinander unterscheiden kann.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
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...
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...
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
"Richtext" wäre da evtl. etwas.
Ansonsten eben markdown, creole, ...
Ach ja und ODF eben - das ist ja sogar offen dokumentiert!
Ansonsten eben markdown, creole, ...
Ach ja und ODF eben - das ist ja sogar offen dokumentiert!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
ODF sieht gut für meinen Zweck aus - danke
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
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?
aus komischen Zeichen
Wie kann ich denn wohl die .odt-Datei als utf-8-Encoding speichern?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
ODF ist eine gezippte Ordnerstruktur mit XML-Dateien und kein Plaintext.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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.cofi hat geschrieben:ODF ist eine gezippte Ordnerstruktur mit XML-Dateien und kein Plaintext.
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
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?
Hast du vielleicht Beispielcode, wie man die Datei öffnet?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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?
Wenn du deinen bisherigen Code postest waere das hilfreicher. Ausserdem: Ist die Datei valide, kannst du sie ohne Python entpacken?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
So könnte Öffnen, Ändern und Schreiben aussehen. Bitte passende Fehlerbehandlung dazudenken.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?
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()
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wobei man da das lxml-Modul nutzen möchte
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Code: Alles auswählen
data = data.replace("foo", "bar")
Du hast natürlich recht. Code zu schreiben ohne zu testen führt gerne zu Syntax- oder Logikfehlern.sma hat geschrieben:Code: Alles auswählen
data = data.replace("foo", "bar")
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
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!
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")