Daten aus MS Word mit pywin32 ziehen
Ich führe Python 3.3 unter Windows aus und muss Zeichenfolgen aus Word-Dokumenten ziehen. Ich habe weit und breit für ungefähr eine Woche nach der besten Methode gesucht, um dies zu tun. Ursprünglich habe ich versucht, die .docx-Dateien als .txt zu speichern und mithilfe von REs zu analysieren, aber ich hatte einige Formatierungsprobleme mit verborgenen Zeichen - ich habe ein Skript verwendet, um eine .docx-Datei zu öffnen und als .txt zu speichern. Ich frage mich, ob ich eine ordnungsgemäße Datei> Speichern unter> .txt erstellt habe, um die ungewöhnliche Formatierung zu entfernen und sie dann ordnungsgemäß zu analysieren. Ich weiß es nicht, aber ich habe diese Methode aufgegeben.
Ich habe versucht, die zu verwendendocx-Modul aber mir wurde gesagt, es ist nicht kompatibel mit Python 3.3. Also bleibt mir die Verwendung von pywin32 und der COM. Ich habe dies erfolgreich mit Excel verwendet, um die Daten zu erhalten, die ich benötige, aber ich habe Probleme mit Word, weil es weit weniger Dokumentation gibt unddas Objektmodell durchlesen Auf Microsofts Website geht mir der Kopf über.
Folgendes muss ich bisher tun, um die Dokumente zu öffnen:
import win32com.client as win32
import glob, os
word = win32.gencache.EnsureDispatch('Word.Application')
word.Visible = True
for infile in glob.glob(os.path.join(r'mypath', '*.docx')):
print(infile)
doc = word.Documents.Open(infile)
An diesem Punkt kann ich also so etwas tun
print(doc.Content.Text)
Und sehen Sie sich den Inhalt der Dateien an, aber es sieht immer noch so aus, als ob eine seltsame Formatierung vorliegt, und ich habe keine Ahnung, wie ich die Daten, die ich benötige, tatsächlich analysieren soll. Ich kann REs erstellen, die erfolgreich die Zeichenfolgen finden, nach denen ich suche. Ich weiß nur nicht, wie ich sie mithilfe der COM in das Programm implementieren kann.
Der Code, den ich bisher habe, wurde größtenteils über Google gefunden. Ich denke nicht, dass das so schwer ist, es ist nur so, dass das Lesen des Objektmodells auf der Microsoft-Website wie das Lesen einer Fremdsprache ist. Jede Hilfe wird sehr geschätzt. Vielen Dank.
Edit: Code, mit dem ich die Dateien von docx nach txt gespeichert habe:
for path, dirs, files in os.walk(r'mypath'):
for doc in [os.path.abspath(os.path.join(path, filename)) for filename in files if fnmatch.fnmatch(filename, '*.docx')]:
print("processing %s" % doc)
wordapp.Documents.Open(doc)
docastxt = doc.rstrip('docx') + 'txt'
wordapp.ActiveDocument.SaveAs(docastxt,FileFormat=win32com.client.constants.wdFormatText)
wordapp.ActiveDocument.Close()