如何使用AWS Lambda通过python将pdf文件转换为.txt

时间:2019-06-27 15:27:39

标签: python amazon-s3 aws-lambda pypdf2 pdftotext

我需要使用python 3.7中的AWS lambda自动将许多pdf转换为文本文件

我已经在自己的计算机上使用poppler / pdftotext,tika和PyPDF2成功转换了pdf文件。但是,tika超时或需要在主机上运行Java实例,但我不确定该如何设置。 pdftotext需要poppler,并且所有在lambda上运行该解决方案的解决方案似乎都已过时,或者我只是对二进制文件不够熟悉,无法理解该解决方案。 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 :(得分:0)

由于错误状态,您正在尝试写入只读文件系统。您正在使用download_file方法,该方法尝试将文件保存到“ test.pdf”,但失败。尝试将download_fileobj (link)与内存缓冲区(例如io.BytesIO)一起使用。然后,将该流提供给PyPDF2。

示例:

import io
[...]

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

[...]

答案 1 :(得分:0)

AWS lambda仅允许您写入/ tmp文件夹,因此您应该下载文件并将其放在其中