Python - Как преобразовать много отдельных PDF-файлов в текст?
Вопрос: Как я могу читать во многих PDF-файлах по одному и тому же пути, используя пакет Python "slate"?
У меня есть папка с более чем 600 PDF-файлов.
Я знаю, как использовать пакет Slate для преобразования отдельных PDF-файлов в текст, используя этот код:
migFiles = [filename for filename in os.listdir(path)
if re.search(r'(.*\.pdf$)', filename) != None]
with open(migFiles[0]) as f:
doc = slate.PDF(f)
len(doc)
Тем не менее, это ограничивает вас одним PDF-файлом за один раз, определяемым как "migFiles[0]" - 0 является первым PDF-файлом в моем пути.
Как я могу читать во многих PDF-файлах текст сразу, сохраняя их в виде отдельных строк или текстовых файлов? Должен ли я использовать другой пакет? Как я могу создать цикл for для чтения всех PDF-файлов в пути?
2 ответа
Попробуйте эту версию:
import glob
import os
import slate
for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")):
with open(pdf_file) as pdf:
txt_file = "{}.txt".format(os.path.splitext(pdf_file)[0])
with open(txt_file,'w') as txt:
txt.write(slate.pdf(pdf))
Это создаст текстовый файл с тем же именем, что и pdf, в том же каталоге, что и pdf-файл с преобразованным содержимым.
Или, если вы хотите сохранить содержимое - попробуйте эту версию; но имейте в виду, что если переведенный контент большой, вы можете исчерпать доступную память:
import glob
import os
import slate
pdf_as_text = {}
for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")):
with open(pdf_file) as pdf:
file_without_extension = os.path.splitext(pdf_file)[0]
pdf_as_text[file_without_extension] = slate.pdf(pdf)
Теперь вы можете использовать pdf_as_text['somefile']
чтобы получить текстовое содержание.
Что вы можете сделать, это использовать простой цикл:
docs = []
for filename in migFiles:
with open(filename) as f:
docs.append(slate.pdf(f))
# or instead of saving file to memory, just process it now
Затем docs[i] будет содержать текст (i+1)-го pdf-файла, и вы можете делать с ним все, что захотите. Кроме того, вы можете обработать файл внутри цикла for.
Если вы хотите преобразовать в текст, вы можете сделать:
docs = []
separator = ' ' # The character you want to use to separate contents of
# consecutive pages; if you want the contents of each pages to be separated
# by a newline, use separator = '\n'
for filename in migFiles:
with open(filename) as f:
docs.append(separator.join(slate.pdf(f))) # turn the pages into plain-text
или же
separator = ' '
for filename in migFiles:
with open(filename) as f:
txtfile = open(filename[:-4]+".txt",'w')
# if filename="abc.pdf", filename[:-4]="abc"
txtfile.write(separator.join(slate.pdf(f)))
txtfile.close()