Поиск в папке Каталог для текста / строк, расположенных в Word.docx ТАБЛИЦЫ - PullRequest
0 голосов
/ 30 ноября 2018

Для моей работы я ищу возможность искать много файлов Word для определенного текста.Однако этот текст находится в файлах Word (docx и doc) в любом количестве таблиц.Я пытаюсь выполнить поиск по ключевому слову, просто чтобы напечатать имя файла, в котором находится текст. Следующий код ниже показывает, что он не находит результатов.Пожалуйста помоги.

import pandas as pd
import numpy as np
import glob
import os
from os import listdir
from docx import Document
import re
import win32com.client as win32

Keyword = 'the'
#pattern = re.compile(Keyword)
documents = r'C:\Users\aac1928\Desktop\Test'

#Searches for Keywords in Converted Text Documents
for root, dirs, files in os.walk(documents, onerror=None):
    for filename in files:
        if filename.endswith(".doc") or filename.endswith("docx"):
            file_path = os.path.join(root, filename)
            try:
                    with open(file_path, "rb") as f:
                        doc = Document(f)
                        for table in doc.tables:
                            for i, row in enumerate(table.rows):
                                if Keyword in Cell.text:
                                    print(filename)
                                    continue
            except Exception:
                pass

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Выполнение сценария в попытке, кроме «всего», не является хорошей идеей при написании кода (на самом деле никогда).Также способ, которым вы обращаетесь к данным, кажется неправильным, это должно работать, хотя:

import numpy as np
import glob
import os
from os import listdir
from docx import Document
import re
import win32com.client as win32
import traceback

Keyword = 'the'
#pattern = re.compile(Keyword)
documents = r'C:\Users\aac1928\Desktop\Test'

def find_word():
    Keyword = 'the'
    #pattern = re.compile(Keyword)
    documents = r'/Users/marc/Documents'
    #Searches for Keywords in Converted Text Documents
    for root, dirs, files in os.walk(documents):

        for filename in files:
            print filename
            if filename.endswith(".doc") or filename.endswith("docx"):
                file_path = os.path.join(root, filename)

                with open(file_path, "rb") as f:
                    doc = Document(f)
                    if search_doc(doc, Keyword):
                        print file_path


def search_doc(doc, Keyword):
    for table in doc.tables:
        for j, column in enumerate(table.columns):
            for i, row in enumerate(table.rows):
                if Keyword in table.cell(j, i).text:
                    return True
    return False

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

0 голосов
/ 30 ноября 2018

Я новичок в Python, но, добавив к вашему коду следующий код:

    except Exception:
        pass
        traceback.print_exc()

, я вижу, что ячейка не определена

Если вы измените цикл нав то время как он будет работать, например,

 for table in doc.tables:
                            for row in table.rows:
                                i = 0

                                while i < len(row.cells):
                                    if Keyword in row.cells[i].text:
                                        print(filename)
                                        continue

Надеюсь, что это поможет

ОБНОВЛЕНИЕ:

import numpy as np
import glob
import os
from os import listdir
from docx import Document
import re
import win32com.client as win32
import traceback

Keyword = 'the'
#pattern = re.compile(Keyword)
documents = r'C:\Users\aac1928\Desktop\Test'

#Searches for Keywords in Converted Text Documents
for root, dirs, files in os.walk(documents, onerror=None):
    print("Here 1")
    for filename in files:
        print(filename)
        if filename.endswith(".doc") or filename.endswith("docx"):
            file_path = os.path.join(root, filename)
            print(file_path)
            try:
                    with open(file_path, "rb") as f:
                        doc = Document(f)
                        for table in doc.tables:
                            for row in table.rows:
                                i = 0
                                while i < len(row.cells):
                                    if Keyword in row.cells[i].text:
                                        print(filename)
                                        continue
            except Exception:
                pass
                traceback.print_exc()

ОБНОВЛЕНИЕ 2:

import numpy as np
import glob
import os
from os import listdir
from docx import Document
import re
import win32com.client as win32
import traceback

Keyword = 'the'
#pattern = re.compile(Keyword)
documents = r'C:\Users\aac1928\Desktop\Test'

documentsWithKeyword = []

#Searches for Keywords in Converted Text Documents
for root, dirs, files in os.walk(documents, onerror=None):
    print("Here 1")
    for filename in files:
        print(filename)
        if filename.endswith(".doc") or filename.endswith("docx"):
            file_path = os.path.join(root, filename)
            print(file_path)
            try:
                    with open(file_path, "rb") as f:
                        doc = Document(f)
                        for table in doc.tables:
                            for row in table.rows:
                                i = 0
                                while i < len(row.cells):
                                    if Keyword in row.cells[i].text:
                                        documentsWithKeyword.append(filename)
                                        continue
            except Exception:
                pass
                traceback.print_exc()

# remove duplicates
documentsWithKeyword = list(set(documentsWithKeyword))

documentsWithKeyword.sort()

#print documents that have the word
for docwithKeyword in documentsWithKeyword
    print(docwithKeyword)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...