Я пытаюсь извлечь текст из pdf с помощью Python. Для этого я нашел pdfminer, который делает довольно хорошую работу, используя pdf2txt.py command line tool следующим образом:Как заставить этот метод Python возвращать строку вместо того, чтобы записывать ее в stdout?
kramer65 $ pdf2txt.py myfile.pdf
all the text contents
of the pdf
are printed out here..
Потому что я хочу, чтобы использовать эту функцию в моей программе, я хочу использовать это в качестве модуля, а не в командной строке инструмент. Таким образом, мне удалось настроить файл pdf2txt.py на следующее:
#!/usr/bin/env python
import sys
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import TextConverter
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams
def main(fp):
debug = 0
pagenos = set()
maxpages = 0
imagewriter = None
codec = 'utf-8'
caching = True
laparams = LAParams()
PDFDocument.debug = debug
PDFParser.debug = debug
CMapDB.debug = debug
PDFPageInterpreter.debug = debug
resourceManager = PDFResourceManager(caching=caching)
outfp = sys.stdout
device = TextConverter(resourceManager, outfp, codec=codec, laparams=laparams, imagewriter=imagewriter)
interpreter = PDFPageInterpreter(resourceManager, device)
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
outfp.close()
return # Here I want to return the extracted text string
теперь я могу назвать его как модуль следующим образом:
>>> from my_pdf2txt import main
>>> main(open('myfile.pdf', 'rb'))
all the text contents
of the pdf
are printed out here..
В настоящее время она выводит результирующие строки с помощью sys.stdout.write()
, но Я действительно хочу, чтобы он возвращал эти строки, используя оператор return
в последней строке моего кода. Но так как использование этого sys.stdout.write скрыто глубоко на lines 165-167 in converter.py, я действительно не знаю, как заставить этот метод возвращать эти строки вместо того, чтобы записывать его в stdout.
Кто-нибудь знает, как я могу получить этот метод, чтобы вернуть найденные строки вместо того, чтобы записывать их в stdout? Все советы приветствуются!
Вы можете использовать 'файл' или' StringIO' как 'stdout'. Таким образом, вы можете поймать результат и вернуть его. –