Создайте новый файл .txt для каждого файла .pdf в каталоге на python - PullRequest
1 голос
/ 31 мая 2019

Мой код должен взять каждый pdf из каталога, распознать его и вернуть файл .txt для каждого pdf. Имя файла pdf и .txt должно быть одинаковым, за исключением того, что .pdf изменяется на .txt. Я застрял в части разделения входного pdf-имени для создания того же имени с расширением .txt для файла OCR. Пример файла в каталоге выглядит следующим образом: «000dbf9d-d53f-465f-a7ce-722722136fb7465.pdf». Мне нужен вывод как "000dbf9d-d53f-465f-a7ce-722722136fb7465.txt". Также мой код не создает новые файлы .txt, но перезаписывает один файл для каждой итерации. Мне нужен новый файл .txt для каждого файла OCR'd .pdf. Код до сих пор:

import io
import glob
from PIL import Image
import pytesseract
from wand.image import Image as wi


files = glob.glob(r"D:\files\**")
for file in files:
    #print(file)
    pdf = wi(filename = file, resolution = 300)

    pdfImg = pdf.convert('jpeg')

    imgBlobs = []

    for img in pdfImg.sequence:
        page = wi(image = img)
        imgBlobs.append(page.make_blob('jpeg'))

    extracted_texts = []

    for imgBlob in imgBlobs:
            im = Image.open(io.BytesIO(imgBlob))
            text = pytesseract.image_to_string(im, lang = 'eng')
            extracted_texts.append(text)          
    with open("D:\\extracted_text\\"+ "\\file1.txt", 'w') as f:
        f.write(str(extracted_texts))

1 Ответ

0 голосов
/ 31 мая 2019

Вам просто нужно отследить имя вашего файла и повторно использовать его в последних двух строках:

# ...
import os


files = glob.glob(r"D:\files\**")
for file in files:
    #print(file)

    # Get the name of the file less any suffixes
    name = os.path.basename(file).split('.')[0]

    # ...

    # Use `name` from above to name your text file         
    with open("D:\\extracted_text\\" + name + ".txt", 'w') as f:
        f.write(str(extracted_texts))
...