Сам давным давно пользуюсь вот такими итераторами. По функциональности имитируют юниксовый find. Пока хватало, но может и надо чего подправить…
def PathFind(pattr, root="."): u"""аналог find из bash""" for di, dl, fl in os.walk(root): for f in glob.fnmatch.filter(fl, pattr): yield os.path.join(di, f) def PathFindDir(pattr, root="."): u"""аналог find из bash""" for di, dl, fl in os.walk(root): for f in glob.fnmatch.filter(dl, pattr): yield os.path.join(di, f)
К вопросу о чтении doc. Да так как вы делаете можно сделать. Причем код будет один в один. НО именно COM интерфейс самая тормозная штука. Если вы текст будете по абзацам собирать, то может оказаться долго. Поэтому лучше сразу все скинуть в текстовый файл и потом с ним разбираться. Думаю будет быстрее чем так как у вас сделано. Вытаскивать текст из xml еще быстрее, но старые файлы не прочитаешь.
Думаю будет как-то так:
import win32com.client word = win32com.client.gencache.EnsureDispatch("Word.Application") word.Visible = 0 time.sleep(1) word.Documents.Open(os.path.abspath(out_file)) doc = word.Documents(word.ActiveDocument()) with open(os.path.abspath(out_file)+".txt","w",encoding="utf-8") as f: f.write(doc.Content.Text)
