Как использовать AWS лямбда для преобразования PDF-файлов в .txt с помощью Python - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно автоматизировать преобразование многих PDF в текстовые файлы, используя AWS lambda в Python 3.7

Я успешно конвертировал pdf файлы, используя poppler / pdftotext, tika и PyPDF2 на моей собственной машине. Однако время tika истекло или необходимо запустить экземпляр Java на хост-компьютере, который я не знаю, как настроить. pdftotext нуждается в poppler, и все решения для его запуска в lambda, похоже, устарели, или я просто недостаточно знаком с binarys, чтобы понять это решение. PyPDF2 кажется наиболее перспективным, но тестирование выдает ошибку.

Код и ошибка, которую я получаю для PyPDF2, выглядит следующим образом:

pdf_file = open(s3.Bucket(my_bucket).download_file('test.pdf','test.pdf'),'rb')

  "errorMessage": "[Errno 30] Read-only file system: 'test.pdf.3F925aC8'",
  "errorType": "OSError",



and if I try to reference it directly,
pdf_file = open('https://s3.amazonaws.com/' + my_bucket + '/test.pdf', 'rb')

  "errorMessage": "[Errno 2] No such file or directory: 'https://s3.amazonaws.com/my_bucket/test.pdf'",
  "errorType": "FileNotFoundError",

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

AWS lambda позволяет только записывать в папку / tmp, поэтому вы должны загрузить файл и поместить его туда

0 голосов
/ 27 июня 2019

Как говорится в сообщении об ошибке, вы пытаетесь выполнить запись в файловую систему только для чтения. Вы используете метод download_file, который пытается сохранить файл в «test.pdf», что не удается. Попробуйте вместо этого использовать download_fileobj (ссылка) вместе с буфером в памяти (например, io.BytesIO). Затем передайте этот поток PyPDF2.

Пример:

import io
[...]

pdf_stream = io.StringIO()
object.download_fileobj(pdf_stream)
pdf_obj = PdfFileReader(pdf_stream)

[...]
...