Преобразование нескольких PDF-файлов в формат txt в папке PYTHON

#python-3.x

#python-3.x

Вопрос:

Я пробую следующий код, но он преобразует только последний PDF-файл в папке:

 import fitz  # this is pymupdf
import glob, os
os.chdir('C:/Users/XXXXXXX')
pdfs = []
for file in glob.glob("*.pdf"):
 with fitz.open(file) as doc:
    text = ""
    for page in doc:
        text  = page.getText()
textfile = open('textfile.txt', 'w',encoding="utf-8")
textfile.write(text)
  

вы можете мне помочь ?!?!?!?!

я использую python 3.8!

Комментарии:

1. Ну, вы инициализируете text = "" с каждой итерацией…

Ответ №1:

Если проблема в том, что ваш цикл не работает (а это, вероятно, так и есть), вы можете использовать os.walk("start_dir") его вместо этого. Например:

 for path, dirs, files in os.walk('.'):  # All files.
    for file in files:  # Loop through each file.
        with fitz.open(file) as doc:  # Open file.
            ... 
  

Комментарии:

1. спасибо за ответ!!! он просматривает папку и преобразует PDF файлы объединяя содержимое в один текстовый файл (textfile.txt ). мне нужно столько файлов txt, сколько файлов PDF (возможно, с тем же именем)

2. Да, вам придется сохранять текст после каждого документа, поэтому, если вы поместите свой код для сохранения файла в for цикл, это должно сработать.

Ответ №2:

Вам нужно указать getText , что нужно получить. Затем добавьте этот текст в список вне цикла, чтобы он не перезаписывался. Наконец, преобразуйте этот список в строку.

Редактировать: я изменил свой первоначальный ответ, чтобы сделать то, что вы просили. Для того, чтобы записать их в отдельные .txt файлы, вы должны включить запись файла в цикл. Не забудьте закрыть textfile перед переходом к следующему PDF-файлу, иначе следующий файл не будет записан.

 import fitz
import glob, os

DIR = '\pdftext\'
os.chdir(DIR   'pdf\')

def listToString(s):  
    str1 = ""  
    for ele in s:  
        str1  = ele   
    return str1  

for file in glob.glob("*.pdf"):
    print(file)
    filename = os.path.splitext(file)
    filename = filename[0]
    pdfs = []

    with fitz.open(file) as doc:
        text = ""
        for page in doc:
            text  = page.getText(text)
            pdfs.append(text)
        
        textfile = open(DIR   'text\'   filename   '.txt', 'w',encoding="utf-8")
    pages = listToString(pdfs)
    textfile.write(pages)
    textfile.close()
  

Комментарии:

1. спасибо за ответ!!! он проходит через папку и преобразует PDF-файлы, объединяя содержимое в один текстовый формат (textfile.txt ). мне нужно столько файлов txt, сколько файлов PDF (возможно, с тем же именем)

Ответ №3:

я пытался:

 import sys, fitz
import glob
for fname in glob.glob("C:/Users/XXXXXX/*.pdf"):

doc = fitz.open(fname) # open document
out = open(fname   ".txt", "wb") # open text output
for page in doc: # iterate the document pages
    text = page.getText().encode("utf8") # get plain text (is in UTF-8)
    out.write(text) # write text of page
    out.write(bytes((12,))) # write page delimiter (form feed 0x0C)
 out.close()
  

это работает, но мне все еще нужно проверить результат 🙂