как извлечь текст из файлов docx, расположенных в разных папках - PullRequest
0 голосов
/ 27 января 2020

Я пишу код для извлечения текста из текстового документа с расширением docx. У меня есть большая папка с именем «EXTRACTION», и эта папка содержит разные подпапки (например, папка 1, 2, 3 и т. Д.), И каждая подпапка содержит от 2 до 10 документов DOCX. Я хочу извлечь текст из каждого из этих файлов и поместить его в новый текстовый файл.

Я начал писать этот код, но он не работает (вторая версия кода):

import os
import glob
import docx



print(os.getcwd())

dirs = dirs = glob.glob('fi*')
path = os.getcwd()

for directory in dirs:
    for filename in directory:
        if filename.endswith(".docx") or filename.endswith(".doc"):
            document = docx.Document(filename)
            #docText = []
            with open('your_file.txt', 'w') as f:
                for paragraph in document.paragraphs:
                    if paragraph.text:
                        #docText.append(paragraph.text)
                        f.write("%s\n" % paragraph.text)

Этот код не работает, не могли бы вы помочь мне улучшить

enter image description here

enter image description here

Ответы [ 2 ]

2 голосов
/ 27 января 2020

В вашем коде directory это просто строка; так что for filename in directory просто зацикливается на f, i, c, h, i, e, r et c.

Кроме того, вы перезаписывали your_file.txt на каждой итерации. Вы хотите открыть его один раз, затем l oop поверх документов, из которых извлекаете.

import glob
import os

import docx

with open('your_file.txt', 'w') as f:
    for directory in glob.glob('fi*'):
        for filename in glob.glob(os.path.join(directory, "*")):
            if filename.endswith((".docx", ".doc")):
                document = docx.Document(filename)    
                for paragraph in document.paragraphs:
                    if paragraph.text:
                        #docText.append(paragraph.text)
                        f.write("%s\n" % item)

Вы используете item, не объявляя его, поэтому здесь все еще есть ошибка; Я не могу догадаться, что вы надеялись, что эта переменная будет содержать, поэтому я просто оставил это, как это было в вашем исходном коде.

1 голос
/ 27 января 2020

вы можете использовать glob.glob, чтобы получить список всех файлов из подкаталогов

files = [file for file_list in [glob.glob('/path/to/mainfolder/**/{}'.format(x),recursive=True) for x in ('*.doc','*.docx')] for file in file_list]

with open('your_file.txt', 'w') as f:
    for file in files:
        document = docx.Document(filename)    
            for paragraph in document.paragraphs:
                if paragraph.text:
                    f.write("%s\n" % item)
...