соответствие частичного имени в direcotry - PullRequest
1 голос
/ 06 февраля 2020

Описание проблемы

У меня есть две папки list_input_files и list_out_files

Входная папка содержит имена отсканированных файлов PDF, а выходная папка содержит названия картинок извлечены из каждого pdf. Имя файла совпадает с именем файла в list_input_folder, но дополнительно имеет расширение номеров страниц, например Page_no1.jpg, Page_no2.jpg and so on ...

Так папка и файлы выглядят как

list_input_folder= ['file_a.pdf', 'file_b.pdf', 'file_c.pdf']

list_out_folder=['file_a.page_no1.png', file_a.page_no2.png',file_a.page_no3.png', file_b.page_no1.png' file_b.page_no2.png,file_c.page_no1.png]

Это код для извлечения изображения из PDF-файлов

from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
import os
input_file='file_a.pdf'
in_path=os.path.join(r"C:\Users\fkhalil\primeStone\docrecog\sampleDocs",input_file)
out_path=os.path.join(r"C:\Users\fkhalil\primeStone\docrecog\sampleDocs\convertedPdfs",input_file)
from wand.image import Image as wi
pdf = wi(filename=in_path, resolution=300)
pdfimage = pdf.convert("jpeg")
i = 1
for img in pdfimage.sequence:
     save_pages = 'Page_no' + str(i) + ".jpg"
     page = wi(image=img)
     page.save(filename=out_path+save_pages)
     i +=1

Что Я хочу сделать?

Я хочу написать программу, чтобы убедиться, что если pdf уже конвертируется, система поднимает file has already been converted и go до следующего файла и запускает его конвертацию и так далее. , избежать затрат времени и ресурсов на уже проделанную работу.

То, что я пробовал

o=os.listdir(r"C:\Users\fkhalil\primeStone\docrecog\sampleDocs\convertedPdfs")
o=[opt.split()[:-1] for opt in o] # to get rid on the page_no.. and the compare the file
# o=[''.join(o) for o in o]
# o=list(set(o))
print(o)
i=input_file.split() 
print(i[:-2])
# o=output.replace('out_','')
if i[:-1]==o:
    print('file already exit')
else:
    print('next block of code')

Буду благодарен за любую помощь или предложение.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Я изменил ваш код, чтобы он работал. Попробуйте это -

allFilesInDir=os.listdir(r"C:\Users\fkhalil\primeStone\docrecog\sampleDocs\convertedPdfs")
# o=[opt.split()[:-1] for opt in o]  to get rid on the page_no.. and the compare the file
processedPDF = []

for item in allFilesInDir:
    filename = item.split(".")[0]
    if filename not in processedPDF:
        processedPDF.append(filename)

print(filename)

i=input_file.split(".")[0] 
print i

# o=output.replace('out_','')
if i in processedPDF:
    print('File already Processed')
else:
    print('next block of code')

В приведенном выше коде я просматриваю все файлы в каталоге convertedPdfs и создаю список имен файлов, которые обрабатываются.

После этого, когда я получаю входное имя файла Я проверяю, присутствует ли это имя в списке processedPDF.

Примечание. Я извлекаю только имя из имени файла перед первым ..

1 голос
/ 06 февраля 2020
list_input_folder= ['file_a.pdf', 'file_b.pdf', 'file_c.pdf','file_d.pdf']
list_out_folder=['file_a.page_no1.png', 'file_a.page_no2.png','file_a.page_no3.png', 'file_b.page_no1.png','file_b.page_no2.png','file_c.page_no1.png']

processed_files = [fi.split('.')[0]+'.pdf' for fi in list_out_folder]
for i in list_input_folder:
    if i in processed_files:
        print("files exist")
    else:
        print('process file')

предположим, что вы получаете список файлов во входной и выходной папках, затем вы можете попробовать вышеуказанное решение, это распечатает файл процесса только для 'file_d.pdf'

...