Wyciąganie danych z MS Word za pomocą pywin32
Używam Pythona 3.3 w systemie Windows i muszę wyciągać ciągi z dokumentów Worda. Szukałem daleko od siebie przez około tydzień najlepszej metody, aby to zrobić. Początkowo próbowałem zapisać pliki .docx jako .txt i analizować za pomocą RE, ale miałem pewne problemy z formatowaniem ukrytych znaków - korzystałem ze skryptu, aby otworzyć .docx i zapisać jako .txt. Zastanawiam się, czy zrobiłem odpowiedni plik> SaveAs> .txt, czy usunę nieparzyste formatowanie, a potem będę mógł poprawnie analizować? Nie wiem, ale zrezygnowałem z tej metody.
Próbowałem użyćmoduł docx ale powiedziano mi, że nie jest kompatybilny z pythonem 3.3. Pozostało mi więc używać pywin32 i COM. Użyłem tego z powodzeniem w programie Excel, aby uzyskać potrzebne dane, ale mam problem z programem Word, ponieważ istnieje znacznie mniej dokumentacji iczytanie modelu obiektu na stronie Microsoft jest ponad moją głową.
Oto co mam do tej pory otworzyć dokument (y):
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)
W tym momencie mogę zrobić coś takiego
print(doc.Content.Text)
I zobacz zawartość plików, ale nadal wygląda na to, że jest tam jakieś dziwne formatowanie i nie mam pojęcia, jak właściwie analizować dane, aby pobrać potrzebne dane. Mogę stworzyć RE, które z powodzeniem znajdą ciągi, których szukam, po prostu nie wiem, jak je zaimplementować w programie za pomocą COM.
Kod, który do tej pory posiadałem, znajdował się głównie w Google. Nie sądzę, żeby to było takie trudne, po prostu czytanie w modelu obiektu na stronie Microsoftu jest jak czytanie języka obcego. Każda pomoc jest DUŻO doceniana. Dziękuję Ci.
Edytuj: kod, którego używałem do zapisywania plików z docx do txt:
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()