t.me/atinfo_chat Telegram группа по автоматизации тестирования

Поиск текста в Word фале на Python


(Mykhailo Poliarush) #1

Мне надо было создать скрпит, чтобы вытягивал емейлы из вордовских файлов. Задача решена следующим образом:

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }import os, re, win32com.client

msword = win32com.client.Dispatch(‘Word.Application’)
msword.Visible = 0

try:
path = “C:\temp\”
files = os.listdir(path)
files.reverse()
emailfile = open(path+‘emaillist.txt’, ‘w’)
i=0
for file in files:
file = “%s%s” % (path, file)
doc = msword.Documents.Open(file)
r=re.search(’([\w-.]+@(\w[\w-]+.)+[\w-]+)’, doc.Content.Text)
if r is not None:
email = r.group(0)
emailfile.write(email+",\n")
i = i + 1
print ("["+str(i)+"] “+file+” DONE")
doc = msword.Documents.Close()
msword.Quit()

except RuntimeError as error:
msword.Quit()
print ("error = "+error){/syntaxhighlighter}

Интересует, можно ли было сделать проще?


(Mykhailo Poliarush) #2

Мой коллега предложил некоторые улучшения к текущему подходу. Так как он более знает Питон, то его решение получилось немного лучше.

{syntaxhighlighter brush: python;fontsize: 100; first-line: 1; }import os, re, win32com.client

msword = win32com.client.Dispatch('Word.Application')
msword.Visible = 0
path = "C:\\temp\\"

try:
    files = os.listdir(path)
    emailfile = open(os.path.join(path, 'emaillist.txt'), 'w')
    compreg = re.compile('([\w\-\.]+@(\w[\w\-]+\.)+[\w\-]+)', re.IGNORECASE)
    for i in range(0, len(files)):
        filename = os.path.join(path, files[i])
        doc = msword.Documents.Open(filename)
       emails = re.findall(p, doc.Content.Text)
       if emails:
            for email in emails: 
                emailfile.write(email)
                emailfile.write()
       print ("[%d] %s DONE" % (i, filename))
       doc = msword.Documents.Close()
except ...
    # process all exceptions here
finally:
    msword.Quit(){/syntaxhighlighter}</p>